小编给大家分享一下在节点。js下如何运用MQTT协议实现即时通讯及离线推送,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
<强>代码强>
服务端:服务器。js
//服务端引入中间件莫斯卡 let mosca =,要求(& # 39;莫斯卡# 39;) let settings =, { ,端口:5112 } let server =, new mosca.Server(设置) server.on(& # 39;准备# 39;,,函数(){ console.log才能(& # 39;Mosca server is up 以及running at port 5112 & # 39;),, }) server.on(& # 39;发表# 39;,,函数(包,客户端),{ ,console.log(& # 39;发表# 39;,,packet.payload) }) server.on (& # 39; clientDisconnected& # 39;,,功能(客户端){ ,console.log(& # 39;断开连接:,& # 39;,,client.id) })
推送端:酒吧。js
//客户端引入mqtt let mqtt =,要求(& # 39;mqtt # 39;); let client =, mqtt.connect (& # 39; mqtt://localhost # 39;,, { 5112年,端口: ,clientId: & # 39; cli_pub& # 39; }) let num =, 0; setInterval (function () { ,client.publish(& # 39;测试# 39;,, ,& # 39;Hello mqtt & # 39;, +,全国矿工工会(+ +), ,{qos: 1}, ,()=祝辞,console.log (num)); },,1000)
订阅端:sub.js
let mqtt =,需要(& # 39;mqtt # 39;) let client =, mqtt.connect (& # 39; mqtt://localhost # 39;,, { 5112年,端口: ,clientId: & # 39; cli_sub& # 39; }) client.subscribe(& # 39;测试# 39;,{qos: 1}) client.on(& # 39;消息# 39;,,function (话题,,消息),{ ,console.log (& # 39; received 信息:,& # 39;,,message.toString ()) })
服务器运行后,先启动酒吧,再启动子,即可在接头中接收到推送过来的消息序列
至此实现了简单的即时推送
<强>离线推送相关配置及简要介绍强>
<强>离线配置——服务端:强>
要实现消息的离线推送,必然需要一个存储临时数据的部件
此处用到的是mongo,当然可以根据需要选择其他的存储工具
服务器。js中的设置需更改为:
let settings =, { 5112年,端口: 持久性:{大敌;,//增加了此项 ,,工厂:mosca.persistence.Mongo, url:,才能“mongodb://localhost: 27017/mosca" ,} }
工厂:引入莫斯卡对特定存储工具的一些处理方法
url:其中27017年的为mongo所监听的端口号,莫斯卡为存储相关数据的数据库
值得一提的是:配置好蒙戈的环境后,不需要提前在mongo中手动创建,若数据库不存在会自动生成,而且莫斯卡会为你作好其他一切基本事项(即:若只想临时体验下效果,甚至可以暂时把mongo放一边)
在mongo中,可以看到自动新添了db:莫斯卡及其下的集合(相当于关系型数据库中的表/关系)
<强>离线配置-客户端:强>
pub.js和子。js中的客户中都可以改为:
let client =, mqtt.connect (& # 39; mqtt://localhost # 39;,, { 5112年,端口: ,clientId: & # 39; cli_ * * & # 39; ,清洁:假//增加了此项 })
- <李>
clientId:区分客户端的识别码
李> <李>清洁:此处决定了客户端在服务端的会话是否会被清除,默认为真,为实现离线推送,我们需要将其保留
李> <李>清洁及上文中的持久性为实现离线推送的关键配置
李>mqtt.connect()会返回一个mqttClient对象,包含了:连接(),订阅(),()发布等一系列方法。
本文中发送端接收端被分为了pub.js和sub.js两个独立文件,仅仅为了方便在不同控制台中观察效果
一个客户端可以既为推送端,又为订阅端
至此,所有代码已完成
<强>其他介绍:强>
client.subscribe ():
为本客户端订阅一个话题,所有订阅此话题的用户都会收到在此话题下推送的信息
//client.subscribe(主题、选择) client.subscribe(& # 39;测试# 39;,{qos: 1})
选择中的qos为通信机制,控制发送端与接收端的互锁程度
上文中的其中一个集合:订阅即记录各用户话题订阅情况