MQTT-Nodejs
概要:使用Aedes包实现MQTT服务器,在前端使用mqtt.js订阅发布消息
1 服务端的实现
Simple plain MQTT server
1 2 3 4 5 6 7 | 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
1 2 3 4 5 6 7 8 9 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理