ब्राउज़र से वेबसोकेट पिंग / पोंग फ्रेम भेजना


130

मैं कनेक्शन को जीवित रखने के लिए वेबसोकेट में पिंग / पोंग संदेशों के बारे में पढ़ता रहता हूं, लेकिन मुझे यकीन नहीं है कि वे क्या हैं। क्या यह एक अलग फ्रेम प्रकार है? (मैं पिंग-पोंग से संबंधित क्रोम में एक जावास्क्रिप्ट वेबस्केट ऑब्जेक्ट पर कोई विधि नहीं देखता हूं)। या यह सिर्फ एक डिज़ाइन पैटर्न है (उदाहरण के लिए मैं शाब्दिक रूप से "पिंग" या सर्वर को कोई अन्य स्ट्रिंग भेजता हूं और इसका जवाब होता है)। क्या पिंग-पोंग निरंतरता के फ्रेम से संबंधित है?

कारण मैं पूछ रहा हूँ कि मैं एक अजगर संरचना का उपयोग कर रहा हूं जो Mongrel2 के पीछे चलता है, इसलिए मैं सोच रहा हूं कि क्या Mongrel2 को एक विशिष्ट पिंग / पोंग संदेश भेजने का कोई तरीका है जो इसे बताएगा कि मेरे अजगर ऐप के बिना कनेक्शन को जीवित रखें। इसके बारे में चिंता करें। इसके लिए एक अलग HTTP विधि होने के अनुरूप, मुझे लगता है। और मुझे लगता है कि एक समर्पित पिंग / पोंग संदेश फ्रेम स्ट्रिंग "पिंग" की तुलना में सरल (सर्वर और नेटवर्क पर कम लोड) हो सकता है, हालांकि यह बहुत ज्यादा मायने नहीं रखेगा।

संपादित करें: मैंने सिर्फ RFC 6455 को देखा और ऐसा लग रहा है कि पिंग और पोंग निश्चित रूप से अपने स्वयं के ऑपकोड के साथ नियंत्रण प्रकार हैं। तो मैं क्रोम में जावास्क्रिप्ट से एक पिंग फ्रेम कैसे भेजूं?


सर्वर से बस पिंग। हर कोई गैर-मानक बंदरगाहों पर नेटवर्किंग के मुद्दे के बारे में जानता है, इसलिए वे नियमित छोटे अंतराल पर पिंग करना शुरू कर रहे हैं। मुझे लगता है कि आप एक खराब लिखित सर्वर को पिंग कर सकते हैं, लेकिन हो सकता है कि उनके साथ कुछ भी संवेदनशील करने के लिए यह बहुत स्मार्ट न हो।


@ user1382306 सर्वर से पिंग पहले मोबाइल डिवाइस बैटरी का उपयोग बहुत तेजी से करेगा। क्लाइंट से पिंग डिवाइस बैटरी बचा सकता है।
कांस्य पुरुष

@ user1382306 बिल्कुल नहीं! गैर-मानक बंदरगाहों पर नेटवर्किंग का मुद्दा क्या है?
हैप्पीडॉग

जवाबों:


121

पिंग फ़्रेम भेजने या पोंग फ़्रेम प्राप्त करने के लिए कोई जावास्क्रिप्ट एपीआई नहीं है। यह या तो आपके ब्राउज़र द्वारा समर्थित है, या नहीं। ब्राउज़र को समर्थन और पिंग / पोंग फ़्रेम का उपयोग करने में सक्षम करने, कॉन्फ़िगर करने या पता लगाने के लिए कोई एपीआई भी नहीं है। इसके लिए एक जावास्क्रिप्ट पिंग / पोंग एपीआई बनाने के बारे में चर्चा हुई । ऐसी संभावना है कि पिंग भविष्य में विन्यास योग्य / पता लगाने योग्य हो सकते हैं, लेकिन यह संभावना नहीं है कि जावास्क्रिप्ट सीधे पिंग / पोंग फ्रेम भेजने और प्राप्त करने में सक्षम होगा।

हालाँकि, यदि आप क्लाइंट और सर्वर कोड दोनों को नियंत्रित करते हैं, तो आप आसानी से उच्च स्तर पर पिंग / पोंग समर्थन जोड़ सकते हैं। यदि आपके पास पहले से ही ऐसा नहीं है, तो आपको अपने संदेश में किसी प्रकार के संदेश शीर्ष लेख / मेटाडेटा की आवश्यकता होगी। जब तक आप प्रति सेकंड सैकड़ों बार पिंग भेजने की योजना बना रहे हैं या हजारों एक साथ ग्राहक हैं, तब तक ओवरहेड अपने आप को करने के लिए बहुत कम होने जा रहा है।


1
@bigmugcup लिंक मृत है
श्री जो

19

पिंग का अर्थ केवल सर्वर से क्लाइंट तक भेजा जाना है, और ब्राउज़र को पोंग ओपकोड के साथ जल्द से जल्द जवाब देना चाहिए। इसलिए आपको उच्च स्तर पर इस बारे में चिंता करने की जरूरत नहीं है।

यद्यपि वे सभी ब्राउज़र मानक का समर्थन नहीं करते हैं क्योंकि वे मान लेते हैं, उनके पास इस तरह के तंत्र को लागू करने में कुछ अंतर हो सकता है, और इसका मतलब यह भी हो सकता है कि कोई पोंग प्रतिक्रिया कार्यक्षमता नहीं है। लेकिन व्यक्तिगत रूप से मैं पिंग / पोंग का उपयोग कर रहा हूं, और कभी भी क्लाइंट को नहीं देखा है जो इस प्रकार के ओपकोड को लागू नहीं करता है और निम्न स्तर के ग्राहक के कार्यान्वयन पर स्वचालित प्रतिक्रिया करता है।


73
आपने कहां पढ़ा है कि पिंग केवल सर्वर से क्लाइंट तक है? RFC का कहना है "कनेक्शन स्थापित होने के बाद और कनेक्शन बंद होने से पहले किसी भी समय एक समापन बिंदु एक पिंग फ्रेम भेजते हैं।"
xryl669

7
यदि आप चाहते हैं कि ग्राहक स्वचालित रूप से डिस्कनेक्ट स्थिति का पता लगा ले (जब कोई आरएसटी / फिन पैकेट प्राप्त नहीं हुआ है, लेकिन नेटवर्क डिस्कनेक्ट हो गया है), तो आपको ग्राहक को पिंग पैकेट भी आरंभ करने की आवश्यकता है।
pswwamb

13
RST / FIN पैकेट प्राप्त नहीं होने पर TCP डिस्कनेक्ट की सूचना नहीं देता है। जब केवल प्रेषक डिस्कनेक्ट किए गए कनेक्शन पर भेजने का प्रयास करता है तो टीसीपी गिराए गए कनेक्शन का पता लगाता है। पिंग्स का उपयोग कई अनुप्रयोगों में दिल की धड़कन के रूप में किया जाता है और यह एक वैध उपयोग है। एक मृत कनेक्शन बस हमेशा के लिए मृत रहेगा जब तक ग्राहक भेजने की कोशिश नहीं करता। इसलिए, ब्राउज़र पर WebSockets के साथ, क्लाइंट पक्ष पर ग्राहक डिस्कनेक्ट का पता लगाने के लिए एक कस्टम पिंग (या दिल की धड़कन) संदेश का उपयोग किया जाना चाहिए। हो सकता है कि सर्वर पिंग करने की कोशिश कर रहा हो और क्लाइंट का पता लगा रहा हो, लेकिन क्लाइंट को सूचित नहीं किया गया। क्लाइंट पिंग्स भी ठीक हैं।
डीडीएस

15
RFC 6455, द वेबसोकेट प्रोटोकॉल में, यह स्पष्ट रूप से कहा गया है: "नोट: एक पिंग फ्रेम या तो एक सुधारात्मक या एक साधन के रूप में काम कर सकता है, यह सत्यापित करने के लिए कि दूरस्थ समापन बिंदु अभी भी उत्तरदायी है।"
डीडीएस

4
यह संभव है कि उपयोगकर्ता-एजेंट अक्सर ताज़ा होने पर सर्वर-केवल पिंग एक अनुशंसित अभ्यास था। लेकिन अब कई वेबसाइटों को एसपीए के रूप में डिज़ाइन किया गया है। इस वातावरण में क्लाइंट अनुप्रयोग के लिए नियमित रूप से सर्वर को पिंग करने के लिए यह काफी आवश्यक हो सकता है ताकि यह सुनिश्चित हो सके कि कनेक्शन खो नहीं गया है।
नोएल अब्राहम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.