使用设备和浏览器连接到 MQTT Broker

Connect to MQTT Broker With Device and Browser

我可以创建一个 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 !")
});

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

谢谢

如果您想同时使用 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)
})