node js+mqttclient实现数据实时推送

内容纲要

由于项目中涉及到股票交易,所以对数据的实时性要求很高.最开始用的是http协议,每隔几秒钟请求一次服务器.后来发现这样做给数据库服务器的压力很大.就想着改成推送的方案,经过经个方案的对比和折腾,最后选择了node js+MQTTClient+websocket+(php/c#)方案.折腾过的方案简单总结如下:

方案一:ajax建立长连接,php端不断的循环来确定是否有新的数据(这种方案不可取,时间一久就会消耗大量的服务器资源)
方案二:用nginx-push-stream-module模块(这种方式比较可取,但是发起连接的合法性难以限制)
方案三:用html5 websocket+php php要写一个服务端程序一直运行(这个做法只对高版本浏览器有用,况且用php写服务端程序感觉效率还是有点差)
方案四:nodejs+websocket.io(采用的方案)
下面说一下最终使用的方案的详细步骤:

一.安装环境和模块

1.安装nodejs环境,可到官网下载http://nodejs.org/
2.安装所需模块(websocket.io,MQTTClient),联网了用nodejs的npm安装即可,如:npm install websocket.io
3.安装mqtt服务

二.实现代码

1.(index.html)前端代码如下:

 

此文件放于wamp环境下的服务器目录下,如:www/mqtt/index.html

2.(server.js)node js后台代码:

 

其中require的client在https://github.com/leizongmin/MQTTClient下载,将下载的文件的client.js和util.js与server.js放于同一文件下面.我把server.js放于d:/node/mqtt/server.js

这样准备工作就做完了.接下来就是运行和测试了,步骤如下:

1.运行sever.js(cmd->cd d:/node/mqtt->node server.js)

如果看到类似的信息

info – socket.io started
debug – client authorized

,说明运行成功

2.在浏览器中打开index.html(http://localhost/mqtt)

3.在mqtt中发布一条信息,如果浏览器中收到你刚发的信息则说明大功告成了!

以上是我个人实现这个功能的一些代码和方法,还未对其做深入研究,如果你有更好的方法也可以提出来.

发表评论

邮箱地址不会被公开。 必填项已用*标注

1 × 8 =