我有一個網頁來控制樹莓派上的恆溫器,並且在嘗試從遠程客戶端獲取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