2012-08-04 24 views
15

Tarayıcıda çalışan bir web sunucum var. Bu webapp, websockets kullanan bir sunucuya bağlı. Böylece sunucu ile istemci/tarayıcı arasındaki iletişim websockets'a dayanmaktadır. Sunucuda bazı sihir olayları meydana gelirse, bazı webservisler web sunucuma yeni bir XML/JSON gönderir ve yeni veriler görüntülenir.Bağlantı, websockets ile canlı olup olmadığını nasıl anlarım?

Ancak, istemci/tarayıcı olarak, bağlantının canlı olup olmadığını nasıl anlarım? 30 saniye boyunca yeni bir XML almıyorum diyelim. Bağlantının kapalı/bozuk/sunucu çevrimdışı olup olmadığını nasıl anlarım ya da her şey yolunda, ama sunucuda yeni bir sihir olayı oluşmadı.

cevap

18

3 yolu:

  • .. tarayıcılar WS Pongs, kaybıyla cevap verecektir sonuçta sunucudan olay OnClose JS
  • gönderme WebSocket pingleri açılır bağlantı kaybı tespit etmek için TCP güvenmek Bağlantı muhtemelen istemci tarafında da daha güçlü bir şekilde tespit edilir.
  • tarayıcıdan sunucuya uygulama düzeyinde kalp atışı gönderir, sunucunun cevap vermesi gerekir. Eğer tarayıcılarından
+0

Standartta tanımlanan hiçbir şey yok mu? ya da tüm "işi" el ile yapmak zorunda mıyım? – Gero

+0

Standart, TCP ile ilgili bağlantı hatalarının (birçok sunucu sorununu içerme eğilimi olan) uç noktalarının algılanması ve bildirilmesi için bir yol sağlar. TCP'den önce hataları tespit edebilmek veya TCP bağlantısının canlı olduğu hata durumlarını tespit edebilmek istiyorsanız, ancak sunucunun kendisi mesajları işlemiyorsa, bunu manuel olarak yapmanız gerekecektir. – zaphoyd

+0

Tamam anlıyorum, ama biraz belirsiz görünüyor. Roma'ya 7 farklı yol gibi görünüyor. – Gero

22

bir WebSocket bağlantı nesnesi bağlantı hala (from the dart documentation) aktifse söyleyen bir readyState alan vardır (JS) WS ping tetikleyemez. Bu size (vb yeniden bağlanmayı deneyin) işlemek istediğiniz bir şey varsa readyState ya

0 - connection not yet established 
1 - conncetion established 
2 - in closing handshake 
3 - connection closed or could not open 

Ayrıca WebSocket close olay için bir olay işleyicisi tanımlayabilirsiniz olabilir.

+7

ReadyState bağlantısı kesildiğinde değişmiyor – megawac

+1

Yukarıdaki yoruma bakarak herhangi biri için: socket.close() ile soketi kapatmak hazır durumunu değiştirecek – Brandon

+0

Evet, bağlantıyı kapattığınızda Brandon'a katılıyorum "3" gösterir –

İlgili konular