2012-12-30 23 views
10

मैं Angular.js और Node.js में शुरुआती हूं, लेकिन मुझे एहसास हुआ है कि रीयल-टाइम एप्लिकेशन बनाने के दो संभावित तरीके हैं। पहला सॉकेट.ओओ का उपयोग कर रहा है और दूसरा क्लाइंट-साइड समाधान के रूप में setInterval() फ़ंक्शन के साथ रीस्टफुल का उपयोग कर रहा है। मैंने दोनों विकल्पों का उपयोग करके अपना आवेदन बनाया, लेकिन मुझे नहीं पता कि दूसरे के बजाय एक का उपयोग करना बेहतर क्यों है।Angular.js और Node.js का उपयोग कर रीयल-टाइम एप्लिकेशन बनाने का बेहतर तरीका कौन सा है?

Angular.js (Socket.io विकल्प) का उपयोग कर मेरे नियंत्रक:

function MyController($scope, socket) { 

    socket.on('test', function(data){ 
    $scope.data = data; 
    console.log($scope.data); 
    }); 

} 

Angular.js (RESTful विकल्प) का उपयोग कर मेरे नियंत्रक:

function MyController($scope, $http) { 

    setInterval(function() { 
    $http.get('/test.json') 
     .success(function(data, status, headers, config) { 
      $scope.data = data; 
      console.log($scope.data); 
     }); 
    }, 1000); 

} 

क्या इन तरीकों के बीच मतभेद हो सकता है चीजों को करने का? अग्रिम धन्यवाद!

उत्तर

8

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

आपको सभी उपयोगकर्ताओं के बीच प्रचारित होने वाले परिवर्तनों के लिए डेटा सदस्यता सेवा बनाना होगा। Tower.js और उल्का दोनों प्रतिक्रियाशील दृष्टिकोण का उपयोग करते हैं, और वे मॉडल परिवर्तनों पर ईवेंट श्रोताओं का उपयोग करते हैं। इस सुविधा के आधार पर आप कितना जटिल, या कितना शक्तिशाली चाहते हैं, इस पर निर्भर करते हुए, वे अलग-अलग कार्यान्वयन उपलब्ध होंगे।

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

2

आपके मामले में सॉकेट.ओ का उपयोग करना बेहतर है।

क्योंकि आप बैकएंड के साथ बहुत से संपर्क करते हैं। अगर ऐसा लगता है कि अंतराल में एपीआई पूछताछ करने के बजाय बस Socket.io का उपयोग करें।

सॉकेट का उपयोग करने से आपके पीछे के अंत और क्लाइंट साइड दोनों पर काम कम हो जाएगा और यह आपके ईवेंट आधारित सामग्री को नियंत्रित करने के लिए और अधिक आसान बना देगा।

3

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

हम पबनब का उपयोग कर रहे हैं और यह बहुत तेज़ काम करता है हालांकि पुशर की तकनीक बेहतर है लेकिन वर्तमान में सभी ब्राउज़रों द्वारा समर्थित नहीं है।

मुझे पता है कि प्रश्न एजे और नोडजेएस के लिए है, लेकिन मुझे लगता है कि किसी तृतीय पक्ष सदस्यता/प्रकाशन API का उपयोग करना इसे प्रबंधित करना आसान बनाता है क्योंकि आपको नोडजे सर्वर और बड़ा भार प्रबंधित करने की आवश्यकता नहीं होगी (जब आपका ऐप जाता है लोकप्रिय)। पुशर/पबनब स्केलेबल है और आप जहां तक ​​चाहें अपने ऐप को स्केल कर सकते हैं।

2

Socket.io निम्न लाभ हैं:

:

  • कम अनावश्यक यातायात और प्रतिपादन
  • कम विलंबता
  • (बेशक) क्लीनर कोड

बाकी इन फायदे हैं

  • सभी ब्राउज़रों पर समर्थित और ग्राहकों
  • कम खुले कनेक्शनों
  • काम करता है, संकुल प्रॉक्सी और अन्यथा जटिल नेटवर्क स्थलाकृतिक विज्ञान

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

6

आपके उपयोग के मामले के आधार पर, मुझे लगता है कि सॉकेट.आईओ जाने का रास्ता है। हालांकि, कोणीय के साथ वेबसाकेट्स का उपयोग करने के लिए कुछ चेतावनी हैं। मेरी सलाह है कि आप इस विषय पर कुछ समय पहले लिखे गए ब्लॉग पोस्ट पर एक नज़र डालें: http://briantford.com/blog/angular-socket-io.html