क्या कोई मुझे बता सकता है कि सिग्नलआर उच्च स्तर पर आंतरिक रूप से कैसे काम करता है?
मैं अनुमान लगा रहा हूं कि यह डेटा का उपयोग कर फ्लश कर रहा है Response.Flushऔर ग्राहक की ओर से यह निश्चित अंतराल पर अजाक्स अनुरोध भेज रहा है। क्या यह सही है?
क्या कोई मुझे बता सकता है कि सिग्नलआर उच्च स्तर पर आंतरिक रूप से कैसे काम करता है?
मैं अनुमान लगा रहा हूं कि यह डेटा का उपयोग कर फ्लश कर रहा है Response.Flushऔर ग्राहक की ओर से यह निश्चित अंतराल पर अजाक्स अनुरोध भेज रहा है। क्या यह सही है?
जवाबों:
नहीं, सिग्नलआर एक कनेक्शन पर एक अमूर्त है। यह आपको उस कनेक्शन पर दो प्रोग्रामिंग मॉडल देता है (हब और लगातार कनेक्शन)। सिग्नलआर में परिवहन की अवधारणा है, प्रत्येक परिवहन यह तय करता है कि डेटा कैसे भेजा / प्राप्त किया जाता है और यह कैसे कनेक्ट और डिस्कनेक्ट होता है।
सिग्नलआर का परिवहन में कुछ बनाया गया है:
सिग्नलआर सर्वर और क्लाइंट द्वारा समर्थित "सर्वश्रेष्ठ" कनेक्शन चुनने की कोशिश करता है (आप इसे एक विशिष्ट परिवहन का उपयोग करने के लिए भी मजबूर कर सकते हैं)।
यह उच्च स्तर है। यदि आप यह देखना चाहते हैं कि प्रत्येक परिवहन कैसे लागू किया जाता है, तो आप स्रोत कोड देख सकते हैं ।
प्रत्येक परिवहन के लिए ग्राहक कोड भी है: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS
यदि आप इस बारे में पूछ रहे हैं कि विशेष रूप से लंबा मतदान परिवहन कैसे काम करता है:
यह सर्वर को एक अजाक्स अनुरोध भेजता है जो प्रतिक्रिया के लिए सिग्नल के लिए अतुल्यकालिक रूप से प्रतीक्षा कर रहा है। जब कोई सिग्नल या रिक्वेस्ट टाइम आउट होता है, तो यह सर्वर से वापस आता है और दूसरा रिक्वेस्ट भेजता है और यह प्रक्रिया जारी रहती है। (मैंने कुछ विवरणों को छोड़ दिया कि कैसे ग्राहक इसे ट्रैक करता है जो उसने देखा था इसलिए यह संदेश याद नहीं करता है)
उम्मीद है कि आपके अधिकांश सवाल का जवाब दे।
@davidfowl पहले ही प्रमुख हिस्से का जवाब दे चुका है। हालाँकि, ट्रांसपोर्ट के व्यवहार में अंतर के बारे में कुछ और जानकारी प्रदान करने के लिए, विशेष रूप से वेबसोकेट और अन्य ट्रांसपोर्ट के बीच; नीचे कुछ बिंदु दिए गए हैं।