非常之迷茫,各種方法都調(diào)試了幾十遍了,都無法通過外網(wǎng)傳遞信息。網(wǎng)頁ws = new WebSocket('ws://XX.XX.XX.XX:2345')
,XX.XX.XX.XX是阿里云服務(wù)器綁定域名的IP。可文檔是是內(nèi)網(wǎng)IP。
服務(wù)器上PHP new Worker("websocket//0.0.0.0:2345")
,可以運行。但是我換成Worker("websocket://XX.XX.XX.XX:2345")
阿里云服務(wù)器綁定域名的IP后,就報錯 E_ERROR "Uncaught Exception: 在其上下文中,該請求的地址無效。
服務(wù)器的2345端口,在阿里云控制臺安全策略中上下行都是開通的。服務(wù)器系統(tǒng)的防火墻都是關(guān)閉的。我通過瀏覽器訪問2345也可以幫到網(wǎng)站,說明其端口是可以訪問的。
我要的實現(xiàn)的是常規(guī)的,A頁面發(fā)信息,B頁面不用刷新就能看見。而教程中并沒有類似的基礎(chǔ)的案例。只有類似AJAX的接受返回。且教程基本都是內(nèi)網(wǎng)IP,沒有服務(wù)器部署的教程。顯然workerman不可能只在內(nèi)網(wǎng)工作。
服務(wù)端監(jiān)聽用0.0.0.0, 不要用ip,因為云服務(wù)器本地沒外網(wǎng)網(wǎng)卡,無法監(jiān)聽外網(wǎng)ip。
new Worker("http://0.0.0.0:2345")
瀏覽器通過地址欄訪問 http://XX.XX.XX.XX:2345
new Worker("websocket://0.0.0.0:2345")
瀏覽器通過js ws = new WebSocket('ws://XX.XX.XX.XX:2345')
訪問
也就是服務(wù)端和客戶端協(xié)議要對應(yīng),例如服務(wù)端是http監(jiān)聽只能用http訪問,不能用websocket訪問。
關(guān)于教程都是內(nèi)網(wǎng)IP訪問,對應(yīng)的內(nèi)網(wǎng)IP你改成外網(wǎng)IP就行了,請靈活變通下。
workerman有很多例子,如果你要A發(fā)數(shù)據(jù)B能看到可以參考 http://m.wtbis.cn/doc/workerman/faq/how-to-broadcast.html ,另外社區(qū)里文檔里各種即時通訊的例子。
關(guān)于workerman部署,就是啟動就可以了,安全組防火墻開放對應(yīng)端口。這些文檔入門指引就介紹了。
問題已經(jīng)解決了。
1,服務(wù)器上綁定方法,Worker("websocket//0.0.0.0:2345"),客戶端綁定方法: WebSocket('ws:外網(wǎng)IP:2345')。兩個是不一樣的.太容易混淆。并不是有的文檔說,兩個要一致。復(fù)制的時候,也容易把websocket和ws復(fù)制錯。
2,至于iis的URL重寫,完全不用管,但要的注意,不要占用端口。workerman的start.PHP,并不需要在站點內(nèi)。
3,端口開通要分上行下行和是否所有IP都可以訪問。