繁体   English   中英

MQTT.js无法建立localhost代理连接

[英]MQTT.js unable to make localhost broker connection

我正在使用React Native移动应用程序。 我使用MQTT.js与代理建立连接。 作为第一个测试,我与Mosquitto公共经纪人建立了联系。 我设法只连接了WebSockets端口(8080和8081)。 不幸的是,与我的本地Mosquitto代理的连接失败而没有错误。

首先,我在Linux计算机上安装了Mosquitto和Node-RED。 我分别从$ mosquitto -v$ node-red 在Node-RED上,我创建了我的第一个流程:连接到mqtt publisher mqtt subscriberinject node和连接到debug nodemqtt subscriber mqtt发布者和订阅者都在同一主题上,并已成功连接到我的Mosquitto本地主机代理。 我部署了:它有效。

如果我尝试与我的React应用程序连接:

let mqtt = require('mqtt')
let client = mqtt.connect('mqtt://localhost:1883')
console.log('client', client)

client.on('connect', function () {
    console.log('connected')
})

client.on('error', function (error) {
    console.log('error', error)
})

它可以运行,但是我的Mosquitto经纪人没有收到任何新连接。 console.log('client', client)返回以下内容:

'client', 
 { options: 
   { protocol: 'ws',
     slashes: true,
     auth: null,
     host: 'localhost:1883',
     port: 1883,
     ...
   }
}

protocol: 'ws'代表WebSockets,但是我的Mosquitto代理基于IP协议,因此我在/etc/mosquitto/conf.d文件夹中创建了protocol.conf并编写了行protocol websockets 然后,当我重新启动Mosquitto $ mosquitto -v -c /etc/mosquitto/conf.d/protocol.conf它显示:

mosquitto version 1.6.4 starting
Config loaded from /etc/mosquitto/conf.d/protocol.conf.
Opening websockets listen socket on port 1883.

我重新编译我的React应用程序:不起作用。

除非console.log('client', client)我的日志为空,否则任何错误。

我预计至少会出现连接错误,但即使Mosquitto经纪人也不会收到连接尝试。

localhost是指执行引用localhost的代码的计算机。 在React应用程序内部,这将是运行正在加载React应用程序的Web浏览器的计算机,我打赌不是正在运行Mosquitto经纪人的计算机。

您需要找出运行代理的计算机的IP地址,并使用它代替localhost 那不是127.0.0.1 ,它是localhost的IP地址,意味着同样的事情,并且会有同样的问题。 它可能看起来像10.0.xx192.168.xx

您也不应通过Web套接字将端口1883用于MQTT。 它可以工作,但是1883是TCP端口上的默认MQTT。 如果您尚未更改Mosquitto的默认配置,它将已经在端口1883上进行侦听。端口8883通常用于Web套接字上的MQTT-确切的端口号与确保其未使用无关紧要。 因为您仅添加了protocol websockets行,所以现在可能正在运行。 如果您永远不会将代理用于websockets之外的其他任何东西,那么可以放心地忽略此部分,但是,如果您希望通过TCP上的MQTT使用它来连接某些东西,端口1883上的websockets将很快变得混乱。

Edit @hardlib提出了一个很好的建议,指出如果网页与运行MQTT代理的计算机是由同一台计算机提供的,则可以使用对location.host的调用来获取服务器/代理的名称或IP地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM