nodejs快速搭建MQTT服务器

简介

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件。

MQTT架构原理图

现在各种资料上查到是一大堆关于`mosca`这个库,但是这个库已经停止维护了,那还有没有别的库呢?答案是肯定的,那就是这篇文章要讲的`aedes`库。

`aedes`库是开发者与所有`Mosca`用户进行大量讨论以及如何在生产环境中部署后诞生的且两个库是同一个作者。这保证了改库的性能和稳定性。

那如何用nodejs搭建mqtt服务器呢?

一、建立一个文件夹,并在该文件夹内打开终端初始化项目

npm init -y

二、安装`aedes`

npm install aedes

三、新建index.js文件

const aedes = require('aedes')()
const server = require('net').createServer(aedes.handle)
const port = 1883

server.listen(port, function () {
  console.log('server started and listening on port ', port)
});

// 身份验证
aedes.authenticate = function (client, username, password, callback) {
    callback(null, (username === 'user' && password.toString() === '123456'));
}

// 客户端连接
aedes.on('client', function (client) {
    console.log('Client Connected: \x1b[33m' + (client ? client.id : client) + '\x1b[0m', 'to broker', aedes.id);
});

// 客户端断开
aedes.on('clientDisconnect', function (client) {
    console.log('Client Disconnected: \x1b[31m' + (client ? client.id : client) + '\x1b[0m', 'to broker', aedes.id);
});

四、运行文件

node index

到此简单的mqtt的服务端已经完成了。 

客户端连接

一、安装mqtt

npm install mqtt

二、新建一个订阅消息文件sub.js

const mqtt = require("mqtt");

const client  = mqtt.connect('mqtt://127.0.0.1:1883',{
        username: "user",
        password: '123456'
});

client.on("connect", function() {
  console.log("服务器连接成功");
  console.log(client.options.clientId);
  client.subscribe("text", { qos: 1 }); // 订阅text消息
});

client.on("message", function(top, message) {
  console.log("当前topic:", top);
  console.log(message.toString());
});

 三、运行文件

node sub

 发布客户端

新建发布消息文件pub.js

const mqtt = require("mqtt");

const client  = mqtt.connect('mqtt://127.0.0.1:1883',{
        username: "user",
        password: '123456'
});

client.on("connect", function() {
  console.log("服务器连接成功");
  console.log(client.options.clientId);
  client.publish("text", JSON.stringify({id: 1}), { qos: 0, retain: true }); // 发布主题text消息
});

运行文件

node pub

到此,mqtt服务端与客户端都好了。在根据各自的功能开发业务逻辑就行了。

关于`aedes`更多高级功能,请参照https://github.com/moscajs/aedes

猜你喜欢

转载自blog.csdn.net/qczxl520/article/details/115165285