websocket - Mqtt 和 Websocket 同时与 Aedes
问题描述
我正在尝试让 Aedes 充当 MQTT 代理和 Websocket 服务器。根据该文档:https ://github.com/moscajs/aedes/blob/master/docs/Examples.md 我想了解的内容。理想情况下,无论是 websocket 客户端还是 mqtt 客户端,我都希望监听器启动。
是否可以执行以下操作:
server.broadcast('foo/bar', {data:''})
并且所有客户端、websockets 和 mqtt 都会收到消息?该文档不是很清楚,我对使用 websocket-stream 感到非常惊讶。lvl很低吧?
这里有一些服务器端代码:
const port = 1883
const aedes = require('aedes')({
persistence: mongoPersistence({
url: 'mongodb://127.0.0.1/aedes-test',
// Optional ttl settings
ttl: {
packets: 300, // Number of seconds
subscriptions: 300
}
}),
authenticate: (client, username, password, callback) => {
},
authorizePublish: (client, packet, callback) => {
},
authorizeSubscribe: (client, packet, callback) => {
}
});
//const server = require('net').createServer(aedes.handle);
const httpServer = require('http').createServer()
const ws = require('websocket-stream')
ws.createServer({ server: httpServer }, aedes.handle)
httpServer.listen(port, function () {
Logger.debug('Aedes listening on port: ' + port)
aedes.publish({ topic: 'aedes/hello', payload: "I'm broker " + aedes.id })
});
解决方案
它应该只是使用相同aedes
对象启动两个服务器的情况,如下所示:
const port = 1883
const wsPort = 8883
const aedes = require('aedes')({
persistence: mongoPersistence({
url: 'mongodb://127.0.0.1/aedes-test',
// Optional ttl settings
ttl: {
packets: 300, // Number of seconds
subscriptions: 300
}
}),
authenticate: (client, username, password, callback) => {
},
authorizePublish: (client, packet, callback) => {
},
authorizeSubscribe: (client, packet, callback) => {
}
});
const server = require('net').createServer(aedes.handle);
const httpServer = require('http').createServer()
const ws = require('websocket-stream')
ws.createServer({ server: httpServer }, aedes.handle)
server.listen(port, function() {
Logger.debug('Ades MQTT listening on port: ' + port)
})
httpServer.listen(wsPort, function () {
Logger.debug('Aedes MQTT-WS listening on port: ' + wsPort)
aedes.publish({ topic: 'aedes/hello', payload: "I'm broker " + aedes.id })
});
推荐阅读
- javascript - 如何在没有 async/await 的情况下使用 then,catch
- c++ - 为什么 == 运算符用于字符串比较的线性时间(看似)相对于任一字符串长度?
- c++ - 我的 GPU 加速 opencv 代码比普通 opencv 慢
- java - 我正在尝试制作默认构造函数
- c++ - WM_KILLFOCUS 逻辑
- reactjs - 在内部运行 cytoscape 与 useEffect 反应
- r - 如果结束日期早于开始日期,我们是否可以在下面添加一条自定义消息来告知无效日期并让表格消失
- javascript - 即使 HTTP 响应为 200,Django 下载也没有开始
- c# - 小型主机游戏的 if 循环
- jquery - 当两个元素具有相同的计数值时,jquery隐藏元素