我有一个网页来控制树莓派上的恒温器,并且在尝试从远程客户端获取websockets时遇到了困难。但是在局域网上看起来工作正常。我明显错过了一些东西(可能是基本的东西),但我似乎无法弄清楚它是什么。websocket将无法连接远程服务器
该pi的本地ip是192.168.1.134
。该网页(由Apache服务器提供)具有URL http://192.168.1.134:8010/thermostat.html
。该页面启动一些JavaScript,然后尝试通过ws://192.168.1.134:9000
使用websockets连接到pi的主程序。 (pi上的服务器正在运行libwebsockets)。 websocket出现了,它似乎工作正常。然后,我尝试通过远程客户端(一个手机,其中WiFi关闭)从http:\\23.239.99.99:8010\thermostat.html
进行连接。 html/js文件加载正常,但Web套接字尝试连接到uri ws:\\23.239.99.99:9000
和这个样本。
据我所知道的,NAT似乎是正确配置:
name ext ext protocol int int ip addr interface
port port port port
start end start end
Thermostat3 8010 8010 TCP 8010 8010 192.168.1.134 eth3.1
Thermostat5 8000 8000 TCP/UDP 80 80 192.168.1.134 eth3.1
Thermostat_ws 9000 9000 TCP/UDP 9000 9000 192.168.1.134 eth3.1
我检查,路由器没有设置任何防火墙,同样没有我的调制解调器。我没有在pi上安装防火墙(我查了一下,没有奇怪的iptables规则)。有谁知道我错过了什么?
---编辑---
我仍然停留在此。我打电话给我的ISP,他们向我保证他们的服务器上没有防火墙。有没有什么办法可以判断9000端口是否被阻塞?
两种思想访问:你_sure_的WS连接使用外部腹腔? (比如它在你的html中没有被硬编码并且没有被更新?)更有用 - 尝试使用443端口可能是值得的,因为它通常比其他端口更“开放”(但是假设8010正在工作,那可能是伸展)。 – GregHNZ
对不起,我已经离开了几天,很慢回到这个。这些都是有效的点。 js代码使用'ws_uri + =“//”+ window.location.host.replace(/\:.*$/,'')+“:9000”;'作为uri,我打印出来正确显示。我尝试了443,但它具有相同的行为(作品来自lan,而不是来自wan ...) – user2766918