在node . js下如何运用MQTT协议实现即时通讯及离线推送

  介绍

小编给大家分享一下在节点。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:莫斯卡及其下的集合(相当于关系型数据库中的表/关系)

在node . js下如何运用MQTT协议实现即时通讯及离线推送

<强>离线配置-客户端:

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为通信机制,控制发送端与接收端的互锁程度

上文中的其中一个集合:订阅即记录各用户话题订阅情况

在node . js下如何运用MQTT协议实现即时通讯及离线推送