सिग्नलआर: क्यों हब बनाम स्थायी कनेक्शन चुनें?


150

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

जवाबों:


92

कनेक्शन और हब सेक्शन में मुझे जो दिखता है, उससे लगता है कि हब निचले स्तर के लगातार कनेक्शन को ओवरलेइंग करते हुए एक विषय प्रणाली प्रदान करते हैं।

नीचे दिए गए अत्यधिक मतदान टिप्पणी से:

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

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

आप लगातार कनेक्शन के शीर्ष पर आसानी से अपनी विषय प्रणाली का निर्माण कर सकते हैं, लेकिन इस मामले में सिग्नलआर टीम ने आपके लिए पहले से ही काम किया है।


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

1
अच्छा बिंदु @davidfowl - मैंने आपकी टिप्पणी को उत्तर में कॉपी किया है क्योंकि मुझे लगता है कि यह अधिक प्रमुख होना चाहिए।
कॉलिन जूल 20'17

63

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

Clients.All.addNewMessageToPage(name, message);

आपको किसी ऑब्जेक्ट को उसके साथ भेजना होगा Connection.Broadcast()या Connection.Send()फिर क्लाइंट को यह तय करना होगा कि उसके साथ क्या करना है। उदाहरण के लिए, आप इस तरह से एक वस्तु भेज सकते हैं:

Connection.Broadcast(new {
    method: "addNewMessageToPage",
    name: "Albert",
    message: "Hello"
});

और क्लाइंट पर, केवल परिभाषित करने के बजाय

yourHub.client.addNewMessageToPage = function(name, message) { 
    // things and stuff
};

आने वाले सभी संदेशों को संभालने के लिए आपको एक कॉलबैक जोड़ना होगा:

function addNewMessageToPage(name, message) {
    // things and stuff
}

connection.received(function (data) {
    var method = data.method;

    window[method](data.name, data.message);
});

आपको OnReceivedविधि में सर्वर साइड पर एक ही तरह का डिस्पैच करना होगा । आपको हब विधियों के साथ जोरदार टाइप की गई वस्तुओं को प्राप्त करने के बजाय डेटा स्ट्रिंग को वहां से हटाना होगा।

हब के ऊपर PersistentConnection चुनने के लिए कई कारण नहीं हैं। एक कारण जो मुझे पता है, वह यह है कि प्रीसेराइज्ड JSON भेजना संभव है को PersistentConnection के माध्यम , जिसे आप हब का उपयोग करके नहीं कर सकते। कुछ स्थितियों में, यह एक प्रासंगिक प्रदर्शन लाभ हो सकता है।

इसके अलावा, प्रलेखन से यह उद्धरण देखें :

एक संचार मॉडल चुनना

अधिकांश अनुप्रयोगों को हब एपीआई का उपयोग करना चाहिए। कनेक्शन API का उपयोग निम्नलिखित परिस्थितियों में किया जा सकता है:

  • भेजे गए वास्तविक संदेश के प्रारूप को निर्दिष्ट करने की आवश्यकता है।

  • डेवलपर एक दूरस्थ आह्वान मॉडल के बजाय एक संदेश और प्रेषण मॉडल के साथ काम करना पसंद करता है।

  • एक मौजूदा एप्लिकेशन जो मैसेजिंग मॉडल का उपयोग करता है, उसे सिग्नलआर का उपयोग करने के लिए पोर्ट किया जा रहा है।

आपकी संदेश संरचना के आधार पर, आपको PersistentConnection का उपयोग करने से छोटे इत्र के लाभ भी मिल सकते हैं।

आप सिग्नलआर के नमूनों पर एक नज़र डालना चाह सकते हैं, विशेष रूप से यह यहाँ।


मेरे एक सहकर्मी ने मुझसे कहा कि वह कारण है कि वह हबस पर परसिस्टेंस चुनता है सुरक्षा कारण है, क्या हब या किसी भी चीज में कोई सुरक्षा समस्या है?
मेहदी देघानी

24

सिग्नलआर का उपयोग करने के दो तरीके हैं: आप इसकी PersistentConnectionकक्षा को ओवरराइड करके निम्न स्तर पर पहुंच सकते हैं , जो आपको इसके लिए बहुत अधिक नियंत्रण देता है; या आप उच्च स्तर 'हब' का उपयोग करके सिग्नलआर को आपके लिए सभी भारी उठाने दे सकते हैं।


5

स्थायी कनेक्शन एक निचले स्तर का एपीआई है, आप कनेक्शन खोले या बंद होने पर अधिक विशिष्ट समय पर कार्रवाई कर सकते हैं, अधिकांश अनुप्रयोगों में हब सबसे अच्छा विकल्प है


4

इन दोनों की तुलना करते समय तीन प्रमुख बिंदु हैं:

  • संदेश प्रारूप
  • संचार मॉडल
  • सिग्नलआर अनुकूलन

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

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

जब अनुकूलन की बात आती है क्योंकि लगातार कनेक्शन अधिक निम्न स्तर होते हैं तो वे आपको अनुकूलन पर अधिक नियंत्रण दे सकते हैं।

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