MQTT-Nodejs
概要:使用Aedes包实现MQTT服务器,在前端使用mqtt.js订阅发布消息
1 服务端的实现
Simple plain MQTT server
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)
})
Simple plain MQTT server using server-factory
const aedes = require('aedes')()
const { createServer } = require('aedes-server-factory')
const port = 1883
const server = createServer(aedes)
server.listen(port, function () {
console.log('server started and listening on port ', port)
})
MQTT over TLS / MQTTS
const fs = require('fs')
const aedes = require('aedes')()
const port = 8883
const options = {
key: fs.readFileSync('YOUR_PRIVATE_KEY_FILE.pem'),
cert: fs.readFileSync('YOUR_PUBLIC_CERT_FILE.pem')
}
const server = require('tls').createServer(options, aedes.handle)
server.listen(port, function () {
console.log('server started and listening on port ', port)
})
MQTT server over WebSocket
const aedes = require('aedes')()
const httpServer = require('http').createServer()
const ws = require('websocket-stream')
const port = 8888
ws.createServer({ server: httpServer }, aedes.handle)
httpServer.listen(port, function () {
console.log('websocket server listening on port ', port)
})
MQTT server over WebSocket using server-factory
const aedes = require('aedes')()
const { createServer } = require('aedes-server-factory')
const port = 8888
const httpServer = createServer(aedes, { ws: true })
httpServer.listen(port, function () {
console.log('websocket server listening on port ', port)
})
2 客户端实现(js)
安装mqtt.js
npm install mqtt -s
由于 JavaScript 单线程特性,MQTT.js 是全异步 MQTT 客户端,MQTT.js 支持 MQTT/TCP、MQTT/TLS、MQTT/WebSocket,在不同运行环境支持的度如下:
- 浏览器环境:MQTT over WebSocket(包括微信小程序、支付宝小程序等定制浏览器环境)
- Node.js 环境:MQTT、MQTT over WebSocket
node 使用
const mqtt = require('mqtt')
const client = mqtt.connect('mqtt://broker.emqx.io:1883')
client.on('connect', function () { console.log('Connected')
client.subscribe('test', function (err) { if (!err) {
client.publish('test', 'Hello mqtt') }
})
})
client.on('message', function (topic, message) { // message is Buffer
console.log(message.toString())
client.end() // 关闭连接
})
前端使用
// CDN
// CDN 会引入全局变量mqt
const client = mqtt.connect('ws://broker.emqx.io:8083')
this.client.on('connect', ()=> {
// 订阅主题presence
this.client.subscribe('server', (err)=> {
if (!err) {
// 发布主题presence
this.client.publish('client', 'Hello mqtt')
}
})
})
this.client.on('close', () =>{
console.log('Disconnected')
})
this.client.on('message', (topic, message) =>{
// message is Buffer
console.log(message.toString())
// 发布主题server
this.client.publish('server','come from browser.')
})
// ES6 Module
import * as mqtt from 'mqtt'
const client = mqtt.connect('ws://broker.emqx.io:8083')

浙公网安备 33010602011771号