博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于BottledWater-PG+nodejs实时地图应用实践
阅读量:6244 次
发布时间:2019-06-22

本文共 2479 字,大约阅读时间需要 8 分钟。

前文作者讲述了BottledWater-PG安装部署,并在pg中实现了数据改变,向kafka发送消息的案例,详细参考。此前作者写过一篇pg的异步消息实现的实时地图应用案例,本文将改用BottledWater-PG实现一遍。

一 服务器端

var fs = require('fs');var http = require('http');var socket = require('socket.io');var Kafka = require('node-rdkafka');    var server = http.createServer(function(req, res) {        res.writeHead(200, { 'Content-type': 'text/html'});    res.end(fs.readFileSync(__dirname + '/index.html'));    }).listen(8081, function() {        console.log('Listening at: http://localhost:8081');});//注册socket.iovar socketio=socket.listen(server);socketio.on('connection', function (socketclient) {    console.log('已连接socket:');    //socketclient.broadcast.emit('GPSCoor', data.payload);//广播给别人    //socketclient.emit('GPSCoor', data.payload);//广播给自己    });var consumer = new Kafka.KafkaConsumer({  //'debug': 'all',  'metadata.broker.list': '192.168.43.27:9092',  'group.id': 'node-rdkafka-consumer-flow-example',  'enable.auto.commit': false});var topicName = 'gps';//logging debug messages, if debug is enabled consumer.on('event.log', function(log) {  console.log(log);});//打印错误consumer.on('error', function(err) {  console.error('Error from consumer');  console.error(err);});consumer.on('ready', function(arg) {  console.log('consumer ready.' + JSON.stringify(arg));  consumer.subscribe([topicName]);  //准备消费消息  consumer.consume();});consumer.on('data', function(m) {    console.log(m);    let _data;    if(m.value==null)//delete操作发送来的消息    {        _data=JSON.parse(m.key);        _data.tg_op='delete';    }    else{        _data=m.value.toString();        _data=JSON.parse(_data);    }       console.log(_data);    socketio.emit('GPSCoor', _data);//广播给所有的客户端});consumer.on('disconnected', function(arg) {  console.log('consumer disconnected. ' + JSON.stringify(arg));});//启动consumer.connect();

二 客户端

    
实时地图应用

三 测试成果

3.1 新增

mcsas=# insert into gps(name,geom) values ('opy','Point(118 31.5)');INSERT 0 1mcsas=# insert into gps(name,geom) values ('ty','Point(117 30.5)');INSERT 0 1
img_fa5e408b18ab9db86a5d879c20f7dcc9.png
新增成果.png

3.2 修改

mcsas=# update gps set geom='Point(115 40)' where name='opy';UPDATE 1
img_ab074c2cf274e1356c1df543d1e3acd1.png
修改成果.png

3.3 删除

mcsas=# delete from gps where name='opy';DELETE 1
img_394f23ea6c9875f096f2a9012467a6bb.png
删除结果.png

四 总结

BottledWater-PG主要作用是将pg库中的表的增删改的消息都发往了kafka,应用程序并没有直接连接数据库,而是直接去消费kafka的消息。在表发生insert,update,delete能获取消息,但是truncate table并未向kafka生成消息,不知是否是我哪里遗漏。

  作者之前曾使用pg自带的notify与listen实现异步消息发送,该方法借助了表的触发器实现。应用程序是直连数据库且数据增删改都会走触发器。
  匆忙中,作者并未对比两者之间孰优孰劣,但一个直连库,一个间接消费,在不同需求中可选择一个比较符合要求的方案而加以应用。

转载地址:http://sepia.baihongyu.com/

你可能感兴趣的文章
win下一些常用的工具软件及网管管理系统
查看>>
Index.get_indexer 方法的含义
查看>>
从C#到TypeScript - Generator
查看>>
Exchange 2010 (一) 为多台CAS/HUB配置证书
查看>>
你有合并单元格我都不怕-Lookup特殊使用破合并单元格求值
查看>>
CSS代码格式化工具
查看>>
【开发笔记】单点登录CAS测试登录Invalid credentials无效凭据
查看>>
检查到apache有错误发送邮件
查看>>
3.4 usermod命令;3.5 用户密码管理;3.6 mkpasswd命令
查看>>
IBM中国研究院院长沈晓卫谈认知计算
查看>>
rhel6创建iso镜像
查看>>
Unix整理笔记-vi简介-里程碑M8
查看>>
Java中方法覆盖的约束
查看>>
用路由器做CA的基于数字证书的ipsec ***
查看>>
运维必须掌握的Linux面试题【转自CentOS中文站】
查看>>
poj1459 Power Network(最大流)
查看>>
相机拍照友盟检测crash是为什么?
查看>>
翻转单词顺序列(剑指offer)
查看>>
ashx和ajax利用POST导致编码错误
查看>>
virtual oj ACboy needs your help again!
查看>>