सिग्नलआर आंतरिक रूप से कैसे काम करता है?


160

क्या कोई मुझे बता सकता है कि सिग्नलआर उच्च स्तर पर आंतरिक रूप से कैसे काम करता है?

मैं अनुमान लगा रहा हूं कि यह डेटा का उपयोग कर फ्लश कर रहा है Response.Flushऔर ग्राहक की ओर से यह निश्चित अंतराल पर अजाक्स अनुरोध भेज रहा है। क्या यह सही है?


13
@dfowler ने हाल ही में स्कॉट हैन्समैन के साथ एक साक्षात्कार किया था जो बहुत जानकारीपूर्ण हैंगमेलमिन्यूट्स . com/291/… था
संरेखित

1
संकेत आर वास्तुकला और कैसे के बारे में अच्छा लेख यह काम करता है lostechies.com/erichexter/2012/11/05/... asp.net/signalr/overview/getting-started/...
महेश

मैं इसके बारे में बहुत पहले से जानता हूं, लेकिन microsoftvirtualacademy.com/Content/…
लॉर्डकेन

1
एनडीसी 2013 की डेविड फाउलर और डेमियन एडवर्ड्स की ler अंडर द कवर विद एएसपी.नेट सिग्नल्र ’नामक इस प्रस्तुति को भी देखें, जहां वे स्टेज पर लाइव सिग्नल के लाइट संस्करण का निर्माण करते हैं। यह बहुत जानकारीपूर्ण है। यह 2.0 से पहले है, लेकिन इससे ज्यादा फर्क नहीं होना चाहिए। vimeo.com/68383353
जोहान बी

जवाबों:


241

नहीं, सिग्नलआर एक कनेक्शन पर एक अमूर्त है। यह आपको उस कनेक्शन पर दो प्रोग्रामिंग मॉडल देता है (हब और लगातार कनेक्शन)। सिग्नलआर में परिवहन की अवधारणा है, प्रत्येक परिवहन यह तय करता है कि डेटा कैसे भेजा / प्राप्त किया जाता है और यह कैसे कनेक्ट और डिस्कनेक्ट होता है।

सिग्नलआर का परिवहन में कुछ बनाया गया है:

  1. WebSockets
  2. सर्वर ने ईवेंट भेजे
  3. हमेशा के लिए फ्रेम
  4. लंबा मतदान

सिग्नलआर सर्वर और क्लाइंट द्वारा समर्थित "सर्वश्रेष्ठ" कनेक्शन चुनने की कोशिश करता है (आप इसे एक विशिष्ट परिवहन का उपयोग करने के लिए भी मजबूर कर सकते हैं)।

यह उच्च स्तर है। यदि आप यह देखना चाहते हैं कि प्रत्येक परिवहन कैसे लागू किया जाता है, तो आप स्रोत कोड देख सकते हैं ।

प्रत्येक परिवहन के लिए ग्राहक कोड भी है: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS

यदि आप इस बारे में पूछ रहे हैं कि विशेष रूप से लंबा मतदान परिवहन कैसे काम करता है:

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

उम्मीद है कि आपके अधिकांश सवाल का जवाब दे।


3
क्या आप मुझे बता सकते हैं कि यह एक समय में कितने कनेक्शन का समर्थन करने में सक्षम है?
फरहाद-तरन

1
सिग्नल का समर्थन करने जा रहे कितने कनेक्शन के बारे में IIS की अनुरोध सीमा पर निर्भर करता है। इसे कॉन्फ़िगर प्रविष्टियों या शेल स्क्रिप्ट का उपयोग करके बढ़ाया जा सकता है। आमतौर पर सिगनल स्मृति में 1000 संयोजकों को कैश करता है।
थानीगैनाथन

1
जैसा कि पहले ही उल्लेख किया गया है, सीमा रैली सर्वर स्तर पर है। डेमियन एडवर्ड्स (सिग्नलआर के सह-निर्माता) को एक एकल 10GB सर्वर से 150,000 कनेक्शन मिले हैं, हालांकि: twitter.com/DamianEdwards/status/486642486350061568
LDJ

इस सवाल का कोई जवाब stackoverflow.com/q/40906789/3565879
Technacron


5

@davidfowl पहले ही प्रमुख हिस्से का जवाब दे चुका है। हालाँकि, ट्रांसपोर्ट के व्यवहार में अंतर के बारे में कुछ और जानकारी प्रदान करने के लिए, विशेष रूप से वेबसोकेट और अन्य ट्रांसपोर्ट के बीच; नीचे कुछ बिंदु दिए गए हैं।

  • WebSocket एकमात्र ट्रांसपोर्ट है जो क्लाइंट और सर्वर के बीच एक सच्चा स्थायी, दो-तरफ़ा कनेक्शन स्थापित करता है। हालाँकि, WebSocket को केवल IIS 8 या इसके बाद के संस्करण और Internet Explorer, Google Chrome और मोज़िला फ़ायरफ़ॉक्स के नवीनतम संस्करणों द्वारा समर्थित किया गया है।
  • हालांकि सर्वर ने ईवेंट्स, फॉरएवर फ्रेम और लॉन्ग पोलिंग, तीनों एक-तरफ़ा संचार का अनुसरण करते हैं, और अधिकांश ब्राउज़रों द्वारा समर्थित हैं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.