2013-01-12 24 views
7

Android çok oyunculu bir oyunun oyuncular arasındaki iletişimi için Android uygulamasında WebSocket desteğini etkinleştirmek için istemci tarafında bir WebSocket sunucusu ve TooTallNate's Java library kullanıyorum. Dolayısıyla, sadece açıkça belirtmek gerekirse, mobil tarayıcılarda WebSocket desteği benim için önemli değil.WebSocket desteği

Maalesef, kullanıcılar bağlantı hataları veya alınmamış iletiler gibi sorunlarla karşılaştıklarını bildiriyorlar. Bu, mobil cihazlardaki (engellenen bağlantı noktaları, güvenlik duvarları, mobil İnternet bağlantısı) genel bir WebSockets sorunu mu yoksa istemci tarafı kodunda bir kusur mu?

Yukarıdaki gibi WebSocket istemci kitaplıklarında deneyiminiz var mı? Sadece autobahn.ws for Android'u keşfettim - ama şu anki kitaplığımdan geçiş yapmaya değip değmeyeceğini bilmiyorum (yukarıya bakın).

Peki ya WAMP? WebSocket teknolojisi tam olarak uygun bir çözüm değildir, bu yüzden alt protokolü (?) WAMP kullanmalıyım?

cevap

4

Her yeni teknoloji, yeni bir dizi sorunla birlikte gelir. WebSocket durumunda, çoğu şirket ağında HTTP bağlantılarına aracılık eden proxy sunucularıyla uyumluluktur. WebSocket protokolü bir HTTP bağlantısını bir WebSocket bağlantısına "yükseltmek" için HTTP yükseltme sistemini (normalde HTTP/SSL için kullanılır) kullanır. Bazı proxy sunucuları bundan hoşlanmaz ve bağlantıyı bırakır. Böylece, belirli bir istemci WebSocket protokolünü kullansa bile, bir bağlantı kurmak mümkün olmayabilir.

+0

Teşekkür ederiz! Bu, kullanılan istemci kütüphanesi ve mobil cihazdan (veya taşıyıcıdan) bağımsız olarak, WebSockets'ın proxy'lerden dolayı her zaman şüpheli olduğu anlamına mı geliyor? Öte yandan, mobil veri planlarını kullanırken genellikle aralarında vekilleriniz yok, değil mi? İlk soru için – caw

+0

. İkinci soru için Evet . Buna bağlı olarak, genellikle bizde var. – atta

+0

ayrıca, kodunuzu istemci ve sunucu websockets bağlantısı ve mesajlaşma için paylaşabilir misiniz? – atta

8

Aynı hatalar, belirli mobil ağlar üzerinden bozuk bir web soketi bağlantısıyla da vardı. onları çözüldü:

(1) portları hareketli: SSL portuna üzerinde WebSocket'e için sunucu ile istemci geçmeye değer (bağlantı noktası 443)

(2) Ping canlı tutma: istemciden periyodik "ping" mesaj gönderme her X saniyede bir sunucuya ve sunucudan geri dönmek için bir "pong" bekleniyor. Sunucu Y saniye içinde "pong" vermezse, istemcide bağlantıyı yeniden başlatın.

Uygulaması (1), bu yoldan en iyi şekilde yararlanmanızı sağlayacaktır.

+0

ping'in oldukça önemli olduğunu anladım çünkü Android ve iOS için websocket istemcilerinin mevcut durumu (2016'dan itibaren) zayıf kapsama alanındaki boşta kalma bağlantılarını çok iyi bir şekilde, hatta bazı durumlarda wifi üzerinden bile tutmuyor. – Nick