首先我们先看一张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