簡體   English   中英

通過3G連接的WebSocket

[英]WebSockets over a 3G connection

我一直在玩Socket.io,node.js和WebSockets,所有這些都可以通過wifi連接正常工作。

但是,當我通過3G連接(例如我的iPhone)測試啟用WebSocket的應用程序時,似乎回到長輪詢是唯一可行的解​​決方案。

使用Socket.io連接失敗,“WebSocket連接無效或Origin未驗證”,然后再回到長輪詢。

我不知道WebSockets是否可以通過3G工作 - 有沒有人成功讓他們這樣工作? 我已經嘗試了許多不同的方法,而且一切似乎都失敗了,這讓我覺得我正在嘗試不可能的事情。

眾所周知,一些移動電話運營商設置了你被迫通過的完全破碎的透明代理。 這是WebSocket工作組從一開始就必須處理的真正煩惱。 該協議旨在確保在存在此類產品時它會很快失敗,以便您的應用程序可以立即回退到其他方法。 如果您發現需要很長時間才能檢測到異常情況並退回,請將其報告給IETF的hybi工作組,以便診斷和解決問題。

與此同時,您可以聯系您的移動電話運營商,詢問他們如何在不通過破損的透明代理的情況下訪問網絡,或者至少知道他們希望何時修復其已損壞的代理以根據規范支持HTTP。 其中一些可能會為您提供多種訪問選項。

正如Willy Tarreau所說,它是移動運營商使用的破碎的透明代理。 我敢肯定它也不是他們獨有的(例如公司的防火牆)。 您可以使用不同的端口號(至少在移動運營商處)來解決這個問題。 端口80以外的東西。使用SSL也可以工作,但我還沒有嘗試過。

然后你會遇到防火牆阻擋端口80和443之外的所有人的問題。

編寫您的websockets應用程序,在端口80和每次連接嘗試的其他端口之間切換,讓主機監聽這兩個端口。 然后你很有可能連接到服務器。 如果你使用linux同時監聽兩個端口,請使用iptables端口REDIRECT。

您可以使用Server-Sent Events協議而不是WebSockets。

SSE更簡單,與HTTP兼容,可以通過代理。

在某些移動網絡上發生了與錯誤的Web套接字連接相同的錯誤。 解決了他們;

  1. 移動端口:將服務器和客戶端移動到websocket到SSL端口(端口443)

  2. Ping keep-alive:每隔X秒從客戶端向服務器發送定期“ping”消息,並等待“pong”從服務器返回。 如果服務器在Y秒內沒有返回“pong”,請在客戶端重新啟動連接。

實施(1)將為您提供大部分的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM