前言:
实现MQTT服务器及客户端的方法有很多种,今天我们学习一下怎么使用nodejs实现mqtt协议,这里我们主要使用两个工具mosca和mqtt.js
首先需要了解一下mosca和mqtt.js的关系,下面这张图能清晰的解释如何通过mqtt协议进行交互通信

1.下载nodejs
下载地址:http://nodejs.cn/download/
根据需要下载合适的自己平台的软件
这里我下载的是windows的64位msi,下载好直接安装就行了,直接下一步直到完成。
2.安装mqtt.js模块
这一步非常简单,在你心仪的那个文件夹下打开cmd窗口然后输入
1
| npm install mqtt --save命令即可。
|
安装好会出现如下图红圈内的文件夹及文件
创建一个客户端进行测试
在刚刚安装mqtt.js文件夹下创建一个mqtt-test.js文件,然后键入以下代码
1 2 3 4 5 6 7 8 9 10 11 12 13
| var mqtt = require('mqtt') var client = mqtt.connect('mqtt://test.mosquitto.org')
client.on('connect', function () { client.subscribe('presence') client.publish('presence', 'Hello mqtt') })
client.on('message', function (topic, message) { console.log(message.toString()) client.end() })
|
然后在此文件夹下打开cmd输入
就会出现如下图所示结果

这样就说明你的mqtt模块就建立好了,但这仅限于客户端的使用为了使我们更方便的使用我们将在本地搭建一个服务器
3.安装mosca
下面来说说如何建立服务端
安装mosca(和上面安装mqtt.js一样)
打开cmd然后输入
1
| npm install mosca --save
|
创建mqtt-server.js文件
代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| var mosca = require('mosca');
var ascoltatore = { };
var settings = { port: 1883, http: { port: 3000, bundle: true, static: './' } };
var server = new mosca.Server(settings);
server.on('clientConnected', function(client) { console.log('client connected', client.id); });
server.on('published', function(packet, client) { console.log('Published', packet.payload); });
server.on('ready', setup);
function setup() { console.log('Mosca server is up and running'); }
|
然后在此文件夹下打开cmd 输入
若显示下图所示,则说明本地mqtt服务端搭建完成

链接自己的mqtt服务端
将mqtt-test.js中的mqtt://test.mosquitto.org改为mqtt://127.0.0.1即可
然后打开两个终端
一个是运行服务端的
另一个运行客户端
mosca html客户端代码
1、生成browserMqtt.js ,拷贝出来,放到和index.html目录下面
1 2 3
| cd node_modules/mqtt npm install . webpack mqtt.js ./browserMqtt.js --output-library mqtt
|
2、创建index.html
注意
html客户端的地址是ws://localhost:3000,这个ws开头表示是websocket的地址,端口号是3000,不是1883
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <html> <head> <script src="./browserMqtt.js"></script> </head> <body> <script> console.log('hello 0 '); var client = mqtt.connect("ws://10.8.5.79:3000"); console.log('hello 1'); client.subscribe("mqtt/demo"); console.log('hello 12'); client.on("message", function(topic, payload) { alert([topic, payload].join(": ")); client.end(); });
client.publish("mqtt/demo", "hello world!"); </script> </body> </html>
|
附:参考链接
mqtt.js
mosca
Gitalk 加载中 ...