2012-08-04 20 views
15

मेरे पास एक वेबपैप है, जो ब्राउज़र में चल रहा है। वह वेबपैप एक सर्वर से जुड़ा हुआ है, जो websockets का उपयोग करता है। तो सर्वर और मेरे क्लाइंट/ब्राउज़र के बीच संचार websockets पर आधारित है। अगर सर्वर पर कुछ जादू घटना होती है, तो कुछ webservice मेरे वेबएप पर एक नया एक्सएमएल/जेएसओएन भेजता है और नया डेटा प्रदर्शित होता है।मुझे कैसे पता चलेगा कि वेबसाइकिलों के साथ कनेक्शन जिंदा है या नहीं?

लेकिन मैं क्लाइंट/ब्राउज़र के रूप में कैसे जानता हूं कि कनेक्शन जिंदा है या नहीं? आइए कहें कि मुझे लगभग 30 सेकंड के लिए कोई नया एक्सएमएल नहीं मिला है। मुझे कैसे पता चलेगा कि कनेक्शन बंद/टूटा/सर्वर ऑफलाइन है या सब कुछ ठीक है, लेकिन सर्वर पर स्वयं कोई नया जादू घटना नहीं हुई।

उत्तर

18

3 तरीके:

  • कनेक्टिविटी की हानि है, जो अंततः अप जे एस में घटना OnClose
  • भेजने WebSocket पिंग्स सर्वर से पॉप जाएगा पता लगाने के लिए टीसीपी पर भरोसा करते हैं .. ब्राउज़रों WS pongs, के नुकसान के साथ जवाब देगा कनेक्टिविटी शायद क्लाइंट साइड पर भी अधिक मजबूत रूप से पता चला है
  • ब्राउज़र से सर्वर पर ऐप लेवल दिल की धड़कन भेजें, सर्वर को जवाब देने के लिए तर्क होना चाहिए। आप ब्राउज़र से (जे एस में)
+0

क्या मानक में कुछ भी परिभाषित नहीं है? या मुझे मैन्युअल रूप से सभी "काम" करना है? – Gero

+0

मानक टीसीपी से संबंधित कनेक्शन असफलताओं के अंत बिंदुओं का पता लगाने और सूचित करने का एक तरीका प्रदान करता है (जिसमें सर्वर समस्याओं के कई मामलों को शामिल किया जाता है)। यदि आप टीसीपी के आंकड़ों से पहले विफलताओं का पता लगाने में सक्षम होना चाहते हैं या त्रुटि शर्तों जहां टीसीपी कनेक्शन जिंदा है लेकिन सर्वर स्वयं संदेश संसाधित नहीं कर रहा है तो आपको इसे मैन्युअल रूप से करने की आवश्यकता होगी। – zaphoyd

+0

ठीक है, मैं इसे समझता हूं, लेकिन यह थोड़ा अस्पष्ट लगता है। यह रोम के लिए 7 अलग-अलग सड़कों की तरह दिखता है। – Gero

22

एक WebSocket कनेक्शन वस्तु एक readyState क्षेत्र है जो आपको पता चलेगा कि कनेक्शन अभी भी सक्रिय (from the dart documentation) है WS पिंग्स को गति प्रदान नहीं कर सकते। readyState या तो

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

तुम भी WebSocket close घटना के लिए एक ईवेंट हैंडलर परिभाषित कर सकते हैं हो सकता है अगर यह कुछ आप (फिर से कनेक्ट करने, आदि की कोशिश) को संभालने के लिए चाहते हैं।

+7

तैयार स्थिति – megawac

+1

डिस्कनेक्ट पर परिवर्तित नहीं होती है ऊपर दिए गए टिप्पणी को देखने वाले किसी के लिए: मेरे अनुभव में, सॉकेट.क्लोज़() के साथ सॉकेट बंद करने से तैयार स्थिति – Brandon

+0

बदल जाएगी हाँ, मैं ब्रैंडन से सहमत हूं, जब आप कनेक्शन बंद करते हैं दिखाता है "3" –

संबंधित मुद्दे