nodejs 搭建 mqtt通信(基于Mosca)

发布于:2023-01-11 ⋅ 阅读:(684) ⋅ 点赞:(0)

搭建基于 nodejs 的 MQTT 服务器
一, 创建服务端
1.先从初始化一个 package.json 开始。

npm init

2.安装 mqtt 服务器必要依赖项 mosca mqtt

npm install mosca mqtt

3.根目录下创建 mqtt.js 文件,写入以下内容,创建 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 推送文件,写入以下内容:

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 });
}, 3000);

三,创建客户端接收

根目录下创建 subscribe.js 接收文件,写入以下内容:

const mqtt = require("mqtt");
// const mqtt = require('./node_modules/mqtt/dist/mqtt.min.js')
const client = mqtt.connect("mqtt://127.0.0.1:1883"); //指定服务端地址和端口

client.on("connect", function() {
  console.log("服务器连接成功");
  // connected = client.connected
  client.subscribe("temperature", { qos: 1 }); //订阅主题为test的消息
});
client.on("message", function(top, message) {
  console.log("当前topic:", top);
  console.log("当前温度:", message.toString());
});

四,测试功能
1.启动服务端 mqtt.js
根目录下命令行输入 node mqtt.js/node mqtt 运行服务端,启动成功出现以下信息:
mqtt is running…

2.启动推送客户端 publish.js
根目录下命令行输入 node publish 运行推送客户端
3.启动接收客户端 subscribe.js
根目录下命令行输入 node subscribe 运行接收客户端
不出意外,控制台将会每隔 5 秒打印以下信息

1 开一个 terminal – node mqtt
2 再一个 terminal --node publish
3 再一个 terminal --node subscribe

用vscode的话, 一共要开3个 terminal; 一个 mqtt建服务; 一个 publish发送; 一个 subscribe接收
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果在 node mqtt 时报错,
throw new SchemaError(‘Expected schema to be an object or boolean’);
则按照下面的提示去注释代码
D:\work\web\mqtt-server\186\node_modules\jsonschema\lib\validator.js:110:11)
你的项目地址\node_modules\jsonschema\lib\validator.js:110:11)
这段, 注释掉
// if((typeof schema !== ‘boolean’ && typeof schema !== ‘object’) || schema === null){
// throw new SchemaError(‘Expected schema to be an object or boolean’);
// }

不出意外,is running

node 建立 MQTT :  publish /  broker /  subscrib 都在本地  127
1 if(是外部建立服务, 本地订阅), 
		设置 本地 subscrib   
	const client = mqtt.connect("mqtt://192.168.137.1:1883"); //指定外部的服务端地址和端口
		同步 外部规定的 topic 和 payload

2 if(是本地建立服务, 外部订阅)  
		设置 本地  broker 
	const MqttServer = new mosca.Server({
	  port: 1883
	});
		设置 本地  publish 
	const client = mqtt.connect("mqtt://192.168.137.1 :1883"); //连接到本地对外建立的mqtt服务端
		
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到