我在Linux上安装了最新的Mosquitto MQTT代理,支持websokets,我编辑配置文件为websockets添加一个监听器。
我将这些行添加到配置文件中:
listener 1883
protocol mqtt
listener 1884
protocol websockets
当我跑
时sudo /usr/local/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
代理启动,控制台中的一行显示
Opening websockets listen socket on port 1884.
并且没有进一步的错误。我认为websocket监听器应该正常运行。当我在Node.js中使用mqtt.js测试代理时,mqtt运行良好,但我无法通过websockets连接到代理。
JS代码:
var wsClient = mqtt.connect('ws://my.server.address:1884')
wsClient.on('connect', function(){
console.log('ws connected')
})
wsClient.on('error', function(err) {
console.log(err)
})
运行JS代码后,我看到没有错误或连接消息。经纪人也没有显示关于ws连接的任何消息。
奇怪的是,我在另一个Ubuntu系统上完成了整个工作,但是在这个,一个Red Hat系统,只有mqtt连接工作,ws似乎不起作用,但没有显示错误在任何一方。
可能导致问题的原因是什么?
THX。
更新
我尝试在代理所在的服务器上运行程序,使用ws://127.0.0.1:1884
作为目标,然后连接。但是从一台远程机器,比如说我的笔记本电脑或其他服务器,webokcets仍然无法正常工作。
答案 0 :(得分:1)
在咨询VPS的服务提供商后,我确信我的代码或代理没有任何问题。就像@hardillb所说,这是服务器上的防火墙问题。服务提供商阻止了所有HTTP传输,因此客户端无法与服务器建立websocket连接。