nodejs搭建mqtt服务器

2020-08-05 17:40:09 浏览数 (1)

首先我们先看一张mqtt的架构原理图:

mqtt原理图mqtt原理图

1、nodejs如何搭建mqtt服务器

nodejs搭建mqtt服务器需要使用mosca包,简单搭建示例代码如下:

代码语言:javascript复制
var mosca = require('mosca');

var ascoltatore = {
    //using ascoltatore
    //type: 'mongo',
    //url: 'mongodb://localhost:27017/mqtt',
    //pubsubCollection: 'ascoltatori',
    //mongo: {}
};

var settings = {
    port: 1883,
    backend: ascoltatore
};

var server = new mosca.Server(settings);

server.on('clientConnected', function (client) {
    console.log('client connected', client.id);
});
server.on('ready', setup);


function setup() {
    console.log('Mosca server is up and running');
}

上面短短几行代码就搭建了一台mqtt服务器,只不过比较简陋,没有存储信息,mosca基于Ascoltatori模块开发,可以支持基于redis、MongoDB、AMQP、ZeroMQ和MQTT代理等方式的消息持久化。

2、搭建mqtt客户端

搭建客户端需要使用mqtt这个包,这里我们建立两个客户端,a和b,a发布消息,b订阅消息,这样的话a发布消息,b监听到就可以做一些操作。

a的代码如下:

代码语言:javascript复制
var mqtt = require('mqtt')
var client = mqtt.connect('mqtt://127.0.0.1')

setInterval(() => {
    client.publish('presence', '21323132')
}, 1000);

代码原理很简单,链接mqtt服务器,定时并且发布消息,消息主题为presence,注意这个消息主题;

b的代码为:

代码语言:javascript复制
var mqtt = require('mqtt')
var client = mqtt.connect('mqtt://127.0.0.1')

client.on('connect', function () {
    client.subscribe('presence')
})

client.on('message', function (topic, message) {
    // message is Buffer
    console.log(message.toString())
    console.log(topic);
    // client.end()
})

b客户端链接mqtt服务器,然后订阅presence主题,如果接收到presence主题的信息就会触发message事件。

这样的话,a端和b端就可以实现通讯了,mqtt服务器是一个中间代理。

3、在浏览器中使用mqtt客户端

如何在浏览器端使用mqtt的客户端呢,这需要借助websocket,mqtt.js为我们扩展了应用,我们只需要将mqtt.js引入到我们的前端项目中,就可以在代码中使用mqtt客户端了,其内部原理依靠的是mqtt服务器。

代码如下:

代码语言:javascript复制
<html>
<head>
  <title>test Ws mqtt.js</title>
</head>
<body>
<script src="./browserMqtt.js"></script>
<script>
  var client = mqtt.connect(); // you add a ws:// url here
  client.subscribe("mqtt/demo");

  client.on("message", function(topic, payload) {
    alert([topic, payload].join(": "));
    client.end();
  });

  client.publish("mqtt/demo", "hello world!");
</script>
</body>
</html>

现在前端开发人员一般都借助webpack打包工具,所以直接在项目中使用mqtt这个包就可以了。

以上便在nodejs中使用mqtt的方式了,希望对你有所帮助。

引用资料

https://itbilu.com/nodejs/npm/41wDnJoDg.html

https://itbilu.com/nodejs/npm/Ny_j-wsve.html

https://www.jianshu.com/p/8315acec4e6b

0 人点赞