创建服务端
1.先从初始化一个 package.json 开始。
npm init
2.安装 mqtt 服务器必要依赖项 mosca mqtt
npm install mosca mqtt
3.根目录下创建 mqtt.js 文件,写入以下内容,创建 mqtt 简易服务器。
// MQTT服务端
const mosca = require("mosca")
const MqttServer = new mosca.Server({
port: 1883
})
MqttServer.on("clientConnected", function(client){
// 当有客户端连接时的回调
console.log("client connected", client.id)
})
/**
* 监听MQTT主题消息
* 当客户端有连接发布主题消息时
*/
MqttServer.on("published", function(packet, client){
var topic = packet.topic
switch(topic){
case "temperature":
console.log("message-publish", packet.payload.toString())
// MQTT可转发主题消息到其他主题
MqttServer.publish({
topic: 'other',
payload: 'sssss'
})
break
case "other":
console.log("message-123", packet.payload.toString())
break
}
})
MqttServer.on("ready", function(){
// 当服务开启时的回调
console.log("mqtt is running...")
})
创建客户端推送
根目录下创建 publish.js 推送文件,写入以下内容:
// MQTT 客户推送端
const mqtt = require("mqtt")
const client = mqtt.connect("mqtt://127.0.0.1:1883") // 连接到mqtt服务器
// 写个定时器每隔3秒定时推送天气信息,此业务可替代为自己的实际需求
setInterval(function(){
const value = Math.ceil(Math.random() * 40)
client.publish("temperature", value.toString(), {qos: 0, retain: true})
console.log("value:", value)
}, 3000)
创建客户端接收
根目录下创建 subscribe.js 接收文件,写入以下内容:
// 客户接收端
const mqtt = require("mqtt")
const client = mqtt.connect("mqtt://127.0.0.1:1883") // 指定服务端地址和端口
client.on("connect", function(){
console.log("服务器连接成功")
client.subscribe("temperature", {qos: 1}) // 订阅主题为test的消息
})
client.on("message", function(top, message){
console.log("当前topic:", top)
console.log("当前温度:", message.toString())
})
测试功能
1.启动mqtt服务
node mqtt / node mqtt.js
2.启动publish推送服务
node publish / node publish.js
3.启动subscribe客户接收服务
node subscribe /node subscribe.js
至此,一个基于 nodejs 的简易 mqtt 服务器就搭建完成了。