वेब प्रोग्रामिंग में मतदान क्यों स्वीकार किया जाता है?


108

मैं वर्तमान में रूबी प्रोजेक्ट पर रूबी पर काम कर रहा हूं जो छवियों की एक सूची दिखाता है।

इस प्रोजेक्ट के लिए यह आवश्यक है कि यह वेब पेज को रीफ्रेश किए बिना वास्तविक समय में नए पोस्ट दिखाता है। थोड़ी देर खोजने के बाद, मैंने कुछ जावास्क्रिप्ट समाधानों और सेवाओं जैसे PubNub पर ठोकर खाई है; हालांकि, प्रदान किए गए समाधानों में से कोई भी बिल्कुल भी समझ में नहीं आया।

जावास्क्रिप्ट समाधान ( मतदान ) में निम्नलिखित होता है:

  • उपयोगकर्ता 1 तस्वीरों की सूची को देखता है।
  • पृष्ठभूमि में जावास्क्रिप्ट कोड हर सेकंड एक समापन बिंदु पर मतदान कर रहा है यह देखने के लिए कि क्या कोई नया पोस्ट है।
  • उपयोगकर्ता 2 एक नई तस्वीर जोड़ता है।
  • नया चक्र चालू होने और नया डेटा लाने से पहले 50 ms की देरी है।
  • नई सामग्री को DOM में लोड किया गया है ।

वास्तविक दुनिया के उदाहरण में अनुवाद करने पर यह अजीब लगता है:

  • उपयोगकर्ता 1 अपने डेस्क पर चित्रों का ढेर रखता है।
  • वह हर पल फोटोग्राफर के पास जाता है और पूछता है कि क्या उसके पास कोई नया है?
  • फोटोग्राफर एक नया फोटो बनाता है।
  • यह दूसरा जब वह / वह चलती है, तो वह तस्वीर ले सकती है और उसे ढेर पर रख सकती है।

मेरी राय में समाधान निम्नानुसार होना चाहिए:

  • उपयोगकर्ता 1 अपने डेस्क पर चित्रों का ढेर रखता है।
  • फोटोग्राफर एक नई तस्वीर लेता है।
  • फ़ोटोग्राफ़र ढेर पर चलता है और इसे बाकी के साथ रखता है।

PubNub समाधान मूल रूप से समान है, हालांकि इस बार डेटा साझा करने के लिए पार्टियों के बीच एक आंतरिक चलना है।

कहने की जरूरत नहीं है, दोनों समाधान बहुत ऊर्जा की खपत कर रहे हैं क्योंकि वे तब भी ट्रिगर होते हैं जब लोड करने के लिए कोई डेटा नहीं होता है।

जहाँ तक मेरा ज्ञान है, वहाँ कोई तर्क नहीं है (तर्क) कि इस तरह के कार्यान्वयन का उपयोग लगभग हर रियलटाइम एप्लिकेशन में किया जाता है।


195
एक पल के लिए अनदेखा करना कि वेब ब्राउज़र सर्वर नहीं हैं जो आने वाले कनेक्शन प्राप्त कर सकते हैं ... प्रतीक्षा करें, नहीं, इसे अनदेखा न करें।
ग्रैंडमास्टरबी

17
@ डेनिस: सर्वर और क्लाइंट के बीच एक स्टेटफुल, लगातार कनेक्शन से शायद मतदान की आवश्यकता से छुटकारा मिल जाएगा, लेकिन यह नहीं है कि वेब कैसे डिज़ाइन किया गया था।
FrustratedWithFormsDesigner

58
Websockets के बारे में कैसे?
Idevries

25
या लंबे मतदान पर एक नज़र डालें। मूल रूप से आप मतदान करते हैं, लेकिन सर्वर आपको कोई नया डेटा दिखाने से पहले जवाब नहीं देता है।
मात्सेमन

53
कंप्यूटर-स्पेस में कई पूरी तरह से समझदार समाधान और एल्गोरिदम हैं जो मीटस्पेस में करने के लिए पूरी तरह से बेतुका होगा।
whatsisname

जवाबों:


179

पुशिंग 1, या सीमित संख्या में उपयोगकर्ताओं के लिए अच्छा काम करता है।

अब एक फोटोग्राफर और 1000 उपयोगकर्ताओं के साथ परिदृश्य को बदलें जो सभी चित्र की एक प्रति चाहते हैं। फोटोग्राफर को 1000 ढेर तक चलना होगा। उनमें से कुछ बंद कार्यालय में हो सकते हैं, या पूरे फर्श पर फैल सकते हैं। या छुट्टी पर उनके उपयोगकर्ता, और इस समय नई तस्वीरों में कोई दिलचस्पी नहीं है।

फोटोग्राफर हर समय घूमने में व्यस्त रहेगा और नई तस्वीरें नहीं लेगा।

मौलिक रूप से: ढीले रीयलटाइम आवश्यकताओं के साथ बहुत सारे अविश्वसनीय पाठकों के लिए एक पुल / पोल मॉडल तराजू बेहतर होता है (यदि एक ढेर पर पहुंचने के लिए 10 सेकंड बाद एक तस्वीर लगती है, तो क्या बड़ी बात है)।

उस ने कहा, एक धक्का मॉडल अभी भी बहुत सारी स्थितियों में बेहतर है। यदि आपको कम विलंबता की आवश्यकता है (आपको इसकी आवश्यकता है कि नई फ़ोटो 5s लेने के बाद), या अपडेट दुर्लभ हैं और लगातार और पूर्वानुमान योग्य हैं (हर 10 सेकंड में फोटोग्राफर से पूछते रहें जब वह एक नई तस्वीर एक दिन उत्पन्न करता है), तो खींचना अनुचित है। यह इस बात पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं। NASDAQ: धक्का। मौसम सेवा: पुल। शादी का फोटोग्राफर: शायद खींचो। समाचार फोटो एजेंसी: शायद धक्का।


32
मुझे वास्तव में 1000 उपयोगकर्ताओं के साथ आपकी समानता पसंद है, कुछ छुट्टी पर, कुछ दिलचस्पी नहीं। +1।
रिवालक

4
@EsbenSkovPedersen: सॉकेट की सीमा आईपी पते के कारण नहीं है। यह अधिकतम खुले फ़ाइल डिस्क्रिप्टर के कारण है। तो खुले सॉकेट की अधिकतम संख्या इस बात से स्वतंत्र है कि आप कितने आईपी पते का उपयोग करते हैं।
स्लीपबेटमैन

10
यह हल्के ढंग से लगाने के लिए एक भयानक सादृश्य है। काम करने के लिए पुश के लिए, किसी भी उपयोगकर्ता के ग्राहक को किसी प्रकार का खुला कनेक्शन बनाए रखना चाहिए। वास्तव में, मतदान एक कनेक्शन का एक अनुकरण है। ऐसा नहीं है क्योंकि कुछ क्लाइंट मतदान कर रहे हैं, कि सभी ग्राहकों को सूचित किया जाता है। इसी तरह, जब कुछ क्लाइंट पुश नोटिफिकेशन के लिए कनेक्शन खोलते हैं, तो सभी क्लाइंट को सूचित नहीं किया जाता है। यह बहुत ही खराब सलाह है जो खिड़की से बाहर संसाधनों को फेंकने को आमंत्रित करती है। प्रति सेकंड 10000 अनुरोधों के साथ बमबारी किया जाना वस्तुतः कभी सस्ता नहीं है या अन्यथा 10000 खुली कुर्सियां ​​बनाए रखने से बेहतर है।
back2dos

8
@ खाली: 1s अंतराल यहाँ चर्चा की जा रही है। प्रति सेकंड 10k अनुरोध का मतलब है 10k टीसीपी हैंडशेक और 10k HTTP अनुरोध (प्रत्येक आसानी से 2KB तक पहुंचना), जो आपको परिमाण के कई आदेश देता है अधिक पृष्ठभूमि शोर आपके सर्वर को तेज़ करता है। विभिन्न प्रकार के युद्ध परीक्षण पुस्तकालय हैं जो जगह-जगह मतदान कराने के साथ पुश सब्सक्रिप्शन को आसान बनाते हैं। यहां तक ​​कि उल्कापिंड जैसे फ्रेम भी हैं। जो पूरे मुद्दे को पूरी तरह से खत्म कर देते हैं। किसी और स्पष्टीकरण के बिना स्केलेबिलिटी के लिए अपील करना भी शायद ही एक तर्क है। वैसे भी, मैंने अपनी शंकाओं को आवाज़ दी है और चर्चा शुरू करने की इच्छा नहीं है;)
बैक 2 डोस

5
मैं ऊपर दिए गए back2dos की टिप्पणी से सहमत हूं। अगर पुश, गूगल, स्टाॅक एक्सचेंज, फेसबुक, ऑनलाइन स्टॉक सेवाओं आदि की तुलना में बेहतर ढंग से खींचा जाता है, तो पुल प्रौद्योगिकी का उपयोग करेगा। लेकिन वे नहीं करते। मौलिक रूप से, सुनने वाले स्टेशन को बहुत अधिक सेट करने के बजाय सर्वर को हैमरिंग करना। प्रमुख सेवाएं मतदान से बचती हैं।
ट्रैविस जे

106

मैं वास्तव में आश्चर्यचकित हूं कि केवल एक व्यक्ति ने WebSockets का उल्लेख किया है । समर्थन मूल रूप से हर प्रमुख ब्राउज़र में लागू किया जाता है

वास्तव में PubNub उनका उपयोग करता है। आपके आवेदन के लिए ब्राउज़र शायद एक सॉकेट की सदस्यता लेगा जो एक नई तस्वीर उपलब्ध होने पर प्रसारित होगा। सॉकेट आपको फोटो नहीं भेजेगा, आप मन लगाओ, लेकिन सिर्फ एक लिंक ताकि ब्राउज़र इसे एसिंक्रोनस रूप से डाउनलोड कर सके।

अपने उदाहरण में कुछ इस तरह की कल्पना करें:

  1. उपयोगकर्ता (ओं) से फोटोग्राफर को पता चल सकता है कि वह भविष्य की सभी तस्वीरों के बारे में जानना चाहता है
  2. फोटोग्राफर लाउडस्पीकर पर कहता है कि एक नई तस्वीर उपलब्ध है
  3. उपयोगकर्ता फोटो के लिए फोटोग्राफर से पूछता है

यह कुछ हद तक आपके मूल उदाहरण समाधान की तरह है। यह मतदान से अधिक कुशल है क्योंकि क्लाइंट को सर्वर पर कोई डेटा नहीं भेजना है (शायद दिल की धड़कन को छोड़कर )।

साथ ही, जैसा कि दूसरों ने उल्लेख किया है, ऐसे अन्य तरीके हैं जो साधारण मतदान से बेहतर हैं जो पुराने ब्राउज़रों में काम करते हैं ( लॉन्गपोलिंग, एट अल ।)।


43
@RobertHarvey वेबसॉकेट कैसे आते हैं सवाल से संबंधित नहीं हैं? सवाल पूछता है कि क्या मतदान एक स्वीकार्य रणनीति है, और आजकल यह स्पष्ट रूप से स्वीकार्य नहीं है (या कम से कम इष्टतम नहीं है)। लगभग हर एक उपयोग के मामले में वेबसॉकेट्स, सर्वर द्वारा भेजी जाने वाली घटनाएं और लंबे मतदान बहुत बेहतर प्रदर्शन करते हैं।
फेब्रीसियो मैटे जूल

7
@ रॉबर्टहर्वे जो सिर्फ मेरी व्याख्या थी, जहां तक ​​मैं देख सकता हूं कोई भी रीफ्रैमिंग नहीं है। बेशक, प्रश्न पूछा क्यों यह अभी भी स्वीकार किया जाता है और न इष्टतम रणनीति है क्या , लेकिन ये अभी भी मजबूती से संबंधित imho हैं।
फेब्रीसियो मैटे जूल

25
वेब सॉकेट (और पसंद) निकटतम हैं जो आपको ओपी के "समाधान" को लागू करने के लिए मिल सकते हैं, इसलिए मुझे लगता है कि यह विशेष रूप से उल्लेख नहीं करने के बावजूद यह बहुत प्रासंगिक है।
कोरलप्रिसन

6
उल्लेख करने के लिए नहीं, StackExchangeआप जैसी साइटें अभी (जब तक आप इस वेबपेज को कैश / सेव करके देख रहे हैं) का उपयोग करें WebSockets। यही कारण है कि मैं भी सोच रहा था कि क्यों @korylprince तक कोई भी उल्लेख नहीं करता है WebSockets
trysis

6
@ FabrícioMatté: वास्तव में, हर एक उपयोग के मामले नहीं। लंबे मतदान के लिए हर उपयोगकर्ताओं के लिए एक सॉकेट खुला रखने की आवश्यकता होती है जो सिस्टम संसाधन लेता है। Fr सेवाएं जो बहुत महत्वपूर्ण समय नहीं है, लेकिन बहुत सारे उपयोगकर्ता हैं, एक सॉकेट को खुला रखना आमतौर पर हर अब और फिर एक छोटी 304 सर्विसिंग की तुलना में अधिक महंगा है। अधिकांश सेवाओं के लिए, थोड़ी देरी एक मुद्दा नहीं है। एक एकल मशीन आमतौर पर धक्का के साथ मतदान से अधिक ग्राहकों की सेवा कर सकती है।
रयान

42

कभी-कभी अच्छा काफी अच्छा होता है।

"वास्तविक समय" संचार प्रक्रिया को लागू करने के सभी संभावित तरीकों में से, मतदान शायद सबसे सरल तरीका है। मतदान का प्रभावी ढंग से उपयोग किया जा सकता है जब मतदान अंतराल अपेक्षाकृत लंबा होता है (तात्कालिक के बजाय सेकंड, मिनट या घंटे), और कनेक्शन या संसाधन की जांच करके खपत किए गए घड़ी चक्र वास्तव में कोई फर्क नहीं पड़ता।


3
यह, यह एक हजार बार। यह स्वीकार किया जाता है क्योंकि यह आमतौर पर काफी अच्छा है।
corsiKa

1
यह एक अच्छा पर्याप्त जवाब है
Zain R

31

HTTP प्रोटोकॉल सीमित है कि क्लाइंट को अनुरोध आरंभ करने के लिए एक होना चाहिए। जब तक क्लाइंट के अनुरोध का जवाब नहीं दिया जाता है, सर्वर क्लाइंट के साथ संवाद नहीं कर सकता है।

तो अपने वास्तविक विश्व उदाहरण को समायोजित करने के लिए, निम्नलिखित संयम जोड़ें:

  • उपयोगकर्ता 2 केवल एक वाक्य के उत्तर के साथ उपयोगकर्ता 1 के सवालों का जवाब दे सकता है, जिसके बाद उपयोगकर्ता 1 को छोड़ना होगा। उपयोगकर्ता 2 में संचार का कोई अन्य तरीका नहीं है।

इस नए संयम के साथ, आप इसे मतदान के अलावा कैसे करेंगे?


6
HTTP 2.0 सर्वर पुश का समर्थन करेगा। "पुशिंग सर्वर को एक स्पष्ट अनुरोध के बिना ग्राहकों को अभ्यावेदन भेजने की अनुमति देता है।" en.wikipedia.org/wiki/HTTP_2.0
kaptan

5
@ कप्तान, यह बहुत अच्छा है, लेकिन यह उपलब्ध नहीं है। तुम्हें जो मिला है, उससे करो।
रिवालक

7
लंबे समय से मतदान भी है जो अभी उपलब्ध है और एक पुल का उपयोग करके एक पुश मॉडल का अनुकरण करता है।
टिम बी

24
@ डेनिस: लिखित औद्योगिक स्वचालन सॉफ्टवेयर के बाद मैं सेंसर उदाहरण के अपने मतदान पर टिप्पणी करना चाहूंगा। पोलिंग सेंसर दो उद्देश्य प्रदान करते हैं - सबसे स्पष्ट है नया डेटा लाना। कम स्पष्ट यह पता लगाना है कि सेंसर अभी भी जीवित है, बग के कारण दुर्घटनाग्रस्त नहीं हुआ या कारखाने की आग के कारण जल गया या औद्योगिक दुर्घटना के कारण पिघल गया। मौन, यह तथ्य कि आपको कोई जवाब नहीं मिलता है, मूल्यवान डेटा भी है।
स्लीवेटमैन

3
@ डेनिस सेंसर अक्सर आप डेटा में रुचि रखते हैं की तुलना में बहुत तेजी से समझ में आता है। मतदान आपको सेंसर मूल्य प्राप्त करने की अनुमति देता है, जब आप इसे चाहते हैं, तो उन अपडेट के बिना जो आप परवाह नहीं करते हैं। (कल्पना करें कि यदि ओएस ने आपके एप्लिकेशन को हर बार किसी फ़ाइल को डिस्क पर कहीं भी बदल दिया, तो आपके एप्लिकेशन को फ़ाइल को खोलने और पढ़ने की आवश्यकता है)
immisis

13

मतदान क्यों स्वीकार किया जाता है? क्योंकि वास्तव में हर हल वास्तव में निम्न स्तर का मतदान है!

यदि नई तस्वीरों के उपलब्ध होते ही सर्वर को आपको अपडेट करना चाहिए, तो इसका आमतौर पर आपसे संबंध होना चाहिए - क्योंकि आईपी पते अक्सर बदलते रहते हैं और आपको कभी नहीं पता होता है कि कोई व्यक्ति अब इच्छुक नहीं है, इसलिए ग्राहक को कुछ फॉर्म भेजना होगा उदाहरण के लिए, "मैं अभी भी यहाँ हूँ, मैं ऑफ़लाइन नहीं हूँ"

सभी स्टेटफुल कनेक्शन (उदाहरण के लिए, टीसीपी / आईपी) एक ही काम करते हैं, क्योंकि आप केवल इंटरनेट पर एकवचन डेटा-पैकेट भेज सकते हैं; आप कभी नहीं जानते कि क्या दूसरी पार्टी अभी भी है।

इसलिए हर प्रोटोकॉल का एक टाइमआउट होता है। यदि कोई इकाई X सेकंड के भीतर जवाब नहीं देती है, तो उसे मृत मान लिया जाता है। यहां तक ​​कि अगर आपके पास सर्वर और क्लाइंट के बीच केवल एक खुला कनेक्शन है, बिना किसी डेटा को भेजने के लिए, सर्वर और क्लाइंट को नियमित रूप से रखने वाले पैकेट भेजना है (यदि आप उनके बीच कनेक्शन खोलते हैं, तो यह निम्न स्तर का है) - और कैसे है अंत में यह मतदान से अलग है?

तो सबसे अच्छा तरीका शायद लंबा होगा:

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

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


मैं असहमत हूं कि हर समाधान निम्न-स्तरीय मतदान है। जब आप किसी ग्राहक को खो जाने के लिए आवश्यक मतदान के साथ डेटा भेजने के लिए मतदान को भ्रमित कर रहे हैं। हां, बाद में हमेशा प्रोटोकॉल स्टैक नीचे कहीं न कहीं मतदान समाप्त हो जाएगा, लेकिन यह बहुत कम आवृत्ति पर हो सकता है (जैसे कि हर पांच मिनट में एक बार) जबकि हर सेकंड वास्तविक डेटा के लिए मतदान एक बेकार है जिसे सही धक्का सूचनाओं से बचा जा सकता है। यह स्टैक के किसी भी स्तर पर मतदान नहीं है।
एलन जुरालनेक

पहले सबसे अधिक रखने वाले पैकेट काफी उच्च आवृत्ति पर चलते हैं, क्योंकि आप सामान्य टाइमआउट अंतराल से बचना चाहते हैं, इसलिए कुछ सेकंड टीसीपी / आईपी के लिए असामान्य नहीं है और टीसीपी का उपयोग नहीं करने वाली लगभग कुछ चीजों को फायरवॉल द्वारा अवरुद्ध किया जा सकता है। इसलिए जब मुझे हर X सेकंड में एक डेटा पैकेट भेजने की आवश्यकता होती है, तो इसे लगभग किसी भी कीमत पर कुछ डेटा से क्यों नहीं भरा जाता है?
फाल्को

1
@ गुरलीनक यदि आपके पास 5 मिनट के अंतराल के अंतराल के साथ संबंध था, तो समय अधिक होगा, क्योंकि आपको वास्तविक देरी और खोए हुए पैकेट को जोड़ना होगा। और क्लाइंट के डिस्कनेक्ट होने के बाद सर्वर 5min के लिए कई कनेक्शन रखेगा, इसलिए कुल मिलाकर इससे सर्वर की लागत कम होगी जबकि केवल न्यूनतम बैंडविड्थ की बचत होगी
फाल्को

1
लंबे मतदान के लिए +1। ऊपर देखें धूमकेतु en.wikipedia.org/wiki/Comet_%28programming%29
Zan Lynx

9

मतदान का एक फायदा यह है कि यह उस नुकसान को सीमित करता है जो किसी संदेश के गुम हो जाने या किसी चीज़ की स्थिति गड़बड़ हो जाने के कारण हो सकता है। यदि X हर पाँच सेकंड में एक बार Y से अपने राज्य के लिए पूछता है, तो एक अनुरोध या उत्तर की हानि के परिणामस्वरूप X की जानकारी केवल दस सेकंड की तारीख से बाहर होगी। यदि Y रिबूट हो जाता है, तो X इसके बारे में अगले दिन पता लगा सकता है। समय Y, X के संदेशों में से एक का जवाब देने में सक्षम है। यदि X रिबूट हो जाता है, तो यह वाई को बाद में कुछ भी पूछने के लिए परेशान नहीं कर सकता है, लेकिन जो कोई एक्स की स्थिति देख रहा है, उसे पहचानना चाहिए कि यह रिबूट किया गया है।

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

कुछ मामलों में यह X के लिए यह अनुरोध करने में मददगार हो सकता है कि Y स्वायत्तता से अपनी स्थिति के साथ संदेश भेजता है, या तो समय-समय पर या जब यह बदलता है, और केवल तभी X पोल होता है जब यह Y से कुछ सुने बिना बहुत लंबा हो जाता है। इस तरह की डिज़ाइन को समाप्त कर सकता है। अपने अधिकांश संदेशों को भेजने के लिए X की आवश्यकता होती है (आमतौर पर, X को कम से कम कभी-कभी Y को सूचित करना चाहिए कि यह अभी भी संदेश प्राप्त करने में रुचि रखता है, और Y को संदेशों को भेजना बंद कर देना चाहिए यदि यह बिना ब्याज के बहुत लंबा हो जाता है)। हालांकि, इस तरह के डिजाइन को लगातार वाई की आवश्यकता होती हैएक्स के बारे में जानकारी बनाए रखने के बजाय, जो कोई भी इसे प्रदूषित करने के लिए केवल एक उत्तर भेजने में सक्षम है और फिर तुरंत भूल जाता है कि कौन था। यदि वाई एक एम्बेडेड प्रणाली है, तो इस तरह के सरलीकरण से छोटे और सस्ते नियंत्रक के उपयोग की अनुमति देने के लिए पर्याप्त रूप से मेमोरी आवश्यकताओं को कम करने में मदद मिल सकती है।

संभावित-अविश्वसनीय संचार माध्यम (जैसे यूडीपी या रेडियो) का उपयोग करते समय मतदान का अतिरिक्त लाभ हो सकता है: यह लिंक-लेयर पावती की आवश्यकता को काफी हद तक समाप्त कर सकता है। यदि X, Y को स्टेटस रिक्वेस्ट Q भेजता है, Y एक स्टेटस रिपोर्ट R के साथ प्रतिक्रिया करता है, और X R को सुनता है, तो X को क्यू के लिए किसी भी प्रकार के लिंक-लेयर पावती को सुनने की आवश्यकता नहीं होगी, यह जानने के लिए कि उसे प्राप्त किया गया था। इसके विपरीत, एक बार Y, R को भेजता है, तो उसे यह जानने या देखभाल करने की आवश्यकता नहीं है कि क्या X उसे प्राप्त हुआ। यदि X एक स्थिति अनुरोध भेजता है और उसे कोई प्रतिक्रिया नहीं मिलती है, तो वह दूसरा भेज सकता है। यदि Y एक रिपोर्ट भेजता है और X उसे नहीं सुनता है, तो X दूसरा अनुरोध भेजेगा। यदि प्रत्येक अनुरोध एक बार निकल जाता है और या तो प्रतिक्रिया देता है या नहीं, न तो पार्टी को यह जानने या देखभाल करने की आवश्यकता है कि क्या कोई विशेष संदेश प्राप्त हुआ था। पावती भेजने के बाद से स्थिति अनुरोध या रिपोर्ट के रूप में लगभग बैंडविड्थ की खपत हो सकती है, अनुरोध-रिपोर्ट के राउंड-ट्रिप का उपयोग करने से एक अवांछित रिपोर्ट और पावती की तुलना में बहुत अधिक खर्च नहीं होता है। यदि X उत्तर प्राप्त किए बिना कुछ अनुरोध भेजता है, तो यह कुछ गतिशील रूप से रूट किए गए नेटवर्क पर लिंक-स्तरीय पावती को सक्षम करने की आवश्यकता हो सकती है (और इसके अनुरोध में पूछें कि Y इसी तरह), ताकि अंतर्निहित प्रोटोकॉल स्टैक डिलीवरी की समस्या को पहचान सके और खोज सके एक नया मार्ग, लेकिन जब चीजें एक अनुरोध-रिपोर्ट मॉडल पर काम कर रही हैं, तो लिंक-स्तरीय पावती का उपयोग करने से अधिक कुशल होगा।


जिस समस्या के बारे में आप Y पुश संदेशों के साथ X (दूसरा पैराग्राफ) पर बात करते हैं, वह प्रत्येक संदेश से जुड़े क्रम संख्या के द्वारा तय की जा सकती है। यदि कोई संदेश खो गया है, तो X को पता चल जाएगा क्योंकि उसे वह धारावाहिक प्राप्त नहीं हुआ था। उस समय यह Y. DNS मास्टर के साथ सिंक करने के लिए अन्य उपाय कर सकता है -> दास प्रतिकृति इस तरह से काम करती है।
korylprince

@korylprince: किसी भी पक्ष को लापता संदेश के बारे में पता चल सकता है यदि दूसरे पक्ष के पास कुछ भेजने के लिए अवसर है (और ऐसा सफलतापूर्वक होता है), या यदि उसके पास दूसरी तरफ से कुछ उम्मीद करने का कारण है और उसे कभी प्राप्त नहीं होता है। यदि एक पक्ष स्थिति अद्यतन भेजता है और या तो स्वीकृति की आवश्यकता नहीं होती है या कुछ समय के बाद पुनः प्रयास करता है, और दूसरा पक्ष निर्धारित प्रसारण की उम्मीद नहीं कर रहा है, तो दूसरे पक्ष को पता नहीं चलेगा कि कनेक्शन गायब हो गया है।
सुपरकैट

2
@korylprince - समस्या यह है कि आवधिक संदेशों के बिना, एक्स एक दिन देर से या एक वर्ष देर से या 10 वर्ष देर से लापता संदेश का पता लगा सकता है। उचित समय में लापता पैकेट का पता लगाने के लिए आपको किसी तरह मतदान करने की आवश्यकता है। आप "पोल" खींच सकते हैं या आप पोल को "पुश" कर सकते हैं। पहले को "मतदान" कहा जाता है, दूसरे को "दिल की धड़कन" कहा जाता है
स्लीवेटमैन

दोनों बहुत सच्चे। सब कुछ परिस्थिति पर निर्भर करता है।
कोरलप्रिसन

@slebetman: आवधिक संदेशों के बिना, यदि Y रिबूट हो जाता है, तो ऐसा कोई तंत्र नहीं हो सकता है जिसके द्वारा X कभी खोज सके।
सुपरकैट

1

सवाल अनावश्यक चुनावों की मात्रा बनाम अनावश्यक धक्का की मात्रा को संतुलित करने का है।

यदि आप मतदान करते हैं:

  • इसका जवाब आपको उसी क्षण मिल जाता है। अच्छा है यदि आप कभी-कभार ही पूछते हैं या किसी डेटा की आवश्यकता होती है।
  • आपको "कोई सामग्री नहीं" उत्तर मिल सकता है, जिससे लाइन पर व्यर्थ भार आ सकता है।
  • आप पोल पर तभी लोड करते हैं जब आप मतदान करते हैं, लेकिन हमेशा जब आप मतदान करते हैं।

यदि आप धक्का देते हैं:

  • यह उपलब्ध होने पर आप सही उत्तर देते हैं, जो क्लाइंट की ओर तत्काल प्रसंस्करण की अनुमति देता है।
  • आप उन ग्राहकों को डेटा वितरित कर सकते हैं जो इस डेटा में रुचि नहीं रखते हैं, जिससे लाइन पर व्यर्थ भार उत्पन्न होता है।
  • हर बार नया डेटा होने पर आप लाइन में लोड करते हैं, लेकिन केवल तब जब नया डेटा हो।

विभिन्न परिदृश्यों और उनके नुकसान से निपटने के लिए कई समाधान हैं, उदाहरण के लिए, चुनाव के बीच एक न्यूनतम समय, पोल-केवल परदे के पीछे मुख्य प्रणाली से लोड लेने के लिए, या - पुश के लिए - रजिस्टर करने और निर्दिष्ट करने के लिए एक विनियमन लॉग-ऑफ पर अपंजीकृत करने के बाद वांछित डेटा। जो सबसे अच्छा फिट बैठता है वह कुछ भी नहीं है जिसे आप सामान्य रूप से कह सकते हैं, यह सिस्टम पर निर्भर करता है।

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

लॉग-इन, वांछित डेटा का विवरण और अंत में लॉग-ऑफ़ को लागू करने वाली एक पुश विधि सबसे अधिक कुशल होगी, लेकिन संभवतः औसत "स्क्रिप्ट-किडी" के लिए बहुत जटिल है, और प्रश्न से निपटने की आवश्यकता है: क्या होगा यदि उपयोगकर्ता बस ब्राउज़र बंद हो जाता है और लॉग-ऑफ नहीं किया जा सकता है?

हो सकता है कि किसी अन्य कैश-सर्वर पर कुछ रुपये बचाने की तुलना में अधिक उपयोगकर्ताओं (एक्सेस करना आसान हो) के लिए बेहतर है?


1

किसी कारण से, इन दिनों, सभी युवा वेब डेवलपर्स अतीत के पाठों को भूल गए हैं, और कुछ चीजों ने जिस तरह से विकास किया है, वह क्यों है।

  1. बैंडविड्थ एक मुद्दा था
  2. कनेक्शन रुक-रुक कर हो सकता है।
  3. ब्राउजर्स के पास उतनी कंप्यूटिंग शक्ति नहीं थी
  4. सामग्री तक पहुँचने के अन्य तरीके थे। वेब w3 नहीं है।

इन बाधाओं का सामना करने में, आपके पास लगातार 2 तरह से संचार नहीं हो सकता है। और यदि आप OSI मॉडल को देखते हैं, तो आप पाएंगे कि अधिकांश विचार अंतर्निहित कनेक्शन के साथ दृढ़ता को कम करने के लिए हैं।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.