【问题标题】:Connect to MQTT Broker With Device and Browser使用设备和浏览器连接到 MQTT 代理
【发布时间】:2020-12-09 07:14:10
【问题描述】:

我可以创建一个 MQTT 代理。我也可以创建一个网络客户端。但是设备有问题。我尝试连接设备的 IP(ws://192.168.1.240:1883)。设备无法连接到代理。 Web客户端可以连接WebSocket。

const aedes = require('aedes')()
const httpServer = require('http').createServer()
const ws = require('websocket-stream')
const port = 1883

ws.createServer({ server: httpServer }, aedes.handle)

httpServer.listen(port, function () {
  console.log('websocket server listening on port ', port)
});

我尝试使用另一种方式创建 MQTT 代理并运行。代码如下。这次设备连接到代理。但是 Web 浏览器无法连接到代理。浏览器想要连接ws://192.168.1.240:1883。所以浏览器想要WebSocket

const aedes = require('aedes')()
var server = require('net').createServer(aedes.handle);
var cors = require('cors');

const ip = "192.168.1.240";
const port = 1883;

const httpServer = require('http').createServer();
const io = require('socket.io')(httpServer, {
  cors: {
    origin: "*",
    credentials: true
  }
});

httpServer.listen(8091, () => {
  console.log("Http Server and Socket.io are Running !");
});

server.listen(port, ip, () => {
  console.log("TCP Server is Running !")
});

如何为设备和浏览器创建可连接的代理或服务器?

谢谢

【问题讨论】:

    标签: node.js mqtt


    【解决方案1】:

    如果您想同时使用 MQTT over Websockets 和本机 MQTT,您需要将代理配置为侦听 2 个单独的端口。您不能在同一个端口上同时监听两者。

    例如这将接受 1883 上的本机 MQTT 连接和 8883 上的 Websocket 连接

    const aedes = require('aedes')()
    const server = require('net').createServer(aedes.handle)
    const httpServer = require('http').createServer()
    const ws = require('websocket-stream')
    const port = 1883
    const wsPort = 8883 
    
    server.listen(port, function () {
      console.log('server started and listening on port ', port)
    })
    
    ws.createServer({ server: httpServer }, aedes.handle)
    
    httpServer.listen(wsPort, function () {
      console.log('websocket server listening on port ', wsPort)
    })
    

    【讨论】:

    • 他已经使用了不同的端口。 js httpServer.listen(8091, () => { console.log("Http Server and Socket.io are Running !"); });
    • Socket.io != MQTT over Websockets 并且您没有将 aedes 处理程序绑定到它
    • 我使用 vue.js 作为前端。我可以将哪一个模块用于前端?是 ws 还是 websocket ? @hardillb
    • 这是一个完全独立的问题,但您也不想要一个支持 MQTT over Websockets 的真正 MQTT 客户端
    • 我可以从浏览器连接到 mqtt 代理吗? @hardillb
    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 2018-05-21
    相关资源
    最近更新 更多