2013-01-12 154 views
7

對於Android多人遊戲玩家之間的通信,我在客戶端使用WebSocket服務器和TooTallNate's Java library以在Android應用中啓用WebSocket支持。因此,爲了清楚地指出,移動瀏覽器中的WebSocket支持對我來說並不重要。移動設備上的WebSocket支持

不幸的是,用戶報告他們遇到了問題,例如連接失敗或未收到的消息。這是移動設備上的WebSocket(阻塞端口,防火牆,移動互聯網連接)的一般問題還是可能是客戶端代碼中的缺陷?

你有使用WebSocket客戶端庫的經驗嗎?我剛剛發現了autobahn.ws for Android - 但我不知道是否值得從當前庫中切換(請參閱上文)。

WAMP怎麼樣? WebSocket技術不是完全適合的解決方案,所以我應該使用子協議(?)WAMP?

回答

4

每種新技術都帶來了一系列新問題。在WebSocket的情況下,它與在大多數公司網絡中調解HTTP連接的代理服務器兼容。 WebSocket協議使用HTTP升級系統(通常用於HTTP/SSL)將HTTP連接「升級」爲WebSocket連接。一些代理服務器不喜歡這種情況,並會斷開連接。因此,即使給定的客戶端使用WebSocket協議,也可能無法建立連接。

+0

謝謝!這是否意味着,無論使用的客戶端庫和移動設備(或運營商)如何,由於代理服務器的原因,WebSocket將始終存在疑問?另一方面,當使用移動數據計劃時,您通常沒有中間的代理,是嗎? – caw

+0

第一個問題。第二個問題是 。這取決於,通常我們確實有。 – atta

+0

也可以,請分享您的代碼,以便客戶端和服務器的websockets連接和消息傳遞? – atta

8

在某些移動網絡上出現這些與網絡套接字連接錯誤相同的錯誤。通過解決他們:

(1)移動端口:移動在服務器和客戶端的WebSocket到SSL端口(端口443)

(2)平保活:發送來自客戶端的週期性的「ping」消息到服務器每X秒鐘,並等待「pong」從服務器返回。如果服務器在Y秒內未返回「乒乓」,請重新啓動客戶端的連接。

實現(1)將使您獲得大部分途徑。

+0

我發現ping是非常重要的,因爲Android和iOS的websocket客戶端的當前狀態(截至2016年)不能很好地處理空閒連接丟失,甚至在某些情況下甚至通過wifi。 – Nick