2012-06-04 10 views
6

मैं सराहना करता हूं कि कोई मुझे एक छोटे से संदेह के साथ मदद कर सकता है।सॉकेट.ओ प्रसारण समारोह और रेडिस पब/उप आर्किटेक्चर

socket.io प्रसारण फ़ंक्शन का उपयोग करने और Redis पर पब/उप के साथ आर्किटेक्चर को डिज़ाइन करने के बीच क्या अंतर है?

उदाहरण के लिए, आगे के उदाहरण पर, node.js सर्वर एक "कुंजी" (मॉडल 'todo'), और मूल्य 'डेटा' के लिए CRUD अनुरोध (बनाना) सुन रहा है (socket.io)। जिस क्षण इसे प्राप्त होता है, यह उसी उपयोगकर्ता को फिर से उत्सर्जित करता है, और उसी "चैनल" पर सुनने वाले सभी उपयोगकर्ताओं को प्रसारित करता है।

socket.on('todo:create', function (data, callback) { 
    var id = guid.gen() 
     , todo = db.set('/todo/' + id, data) 
     , json = todo._attributes; 

    socket.emit('todos:create', json); 
    socket.broadcast.emit('todos:create', json); 
    callback(null, json); 
}); 

लेकिन वहाँ "प्रसारण" कुछ का उपयोग कर socket.io, और चाबी के लिए Redis के साथ एक पब/उप मंच उपयोग कर रहा है का एक और तरीका है: मान कार्य करता है। उदाहरण के लिए, आगे के मामले में, हम एक "कुंजी" (मॉडल), फ़ंक्शन (बनाएं), और मूल्य (डेटा) के आधार पर एक CRUD अनुरोध सुन रहे हैं। लेकिन इस मामले पर, एक बार अपनी प्राप्त किया, के माध्यम से भेजा जाता है नहीं "socket.broadcast.emit()", लेकिन प्रकाशित पर Redis:

socket.on(key + ':create', function (data, callback) { 
    var t = new ModelClass(data) 
    , name = '/' + key + ':create'; 
    t.save(function (err) { 
    pub.publish(key, JSON.stringify({key: name, data: t})); 
    }); 
}); 

तो सर्वर साइड पर, एक मॉडल पर किए गए (और हर बदलाव प्रकाशित Redis) करने के लिए, ऊपर हैंडलर backbone.js catched जाएगा(), और (मेरे मामले पर उपयोगकर्ता क्लाइंट पक्ष के लिए भेजा,), कि कुंजी के अनुसार अपने मॉडल प्रस्तुत करना होगा: मूल्य प्राप्त किया:

sio.on('connection', function (socket) { 

    sub.on('message', function (channel, message) { 
     var msg = JSON.parse(message); 
     if (msg && msg.key) { 
      socket.emit(msg.key, msg.data); 
     } 
}); 

तो मेरा सवाल बहुत आसान है :-): दोनों आर्किटेक्चर का अंतर क्या है? कौन सा स्केलेबल है? बेहतर डिजाइन? मोड अग्रिम?

यह मुझे लगता है कि पब/उप आर्किटेक्चर प्लेटफॉर्म के लिए उपयुक्त है जो स्वाभाविक रूप से रूबी की तरह 'रीयलटाइम' का समर्थन नहीं करता है, जो नोड.जेएस के विपरीत है, जो इसे मूल रूप से समर्थन देता है।। क्या मै गलत हु?

+0

अरे @ user1106811! आपको एक उत्तर को स्वीकृत के रूप में चिह्नित करना चाहिए। धन्यवाद – jackdbernier

उत्तर

0

सॉकेट.ओ की प्रसारण विधि वर्तमान सॉड.जेएस सर्वर से जुड़े सभी सॉकेट्स को प्रसारित करेगी, लेकिन यदि आपका एप्लिकेशन लोकप्रिय हो जाता है और आपको सभी सॉकेट.ओ कनेक्शन होस्ट करने के लिए एक से अधिक सर्वर की आवश्यकता होती है? Redis 'पब/उप का उपयोग करके आपके संदेश कई सर्वरों को एक साथ वितरित किया जा सकता है।

0

आप सॉकेट.io में रेडिसस्टोर पर एक नज़र डालना चाहते हैं। मेमोरीस्टोर का उपयोग करने के बजाय, आप RedisStore का उपयोग करने के लिए socket.io सेट कर सकते हैं। ताकि आप अपना आवेदन बढ़ा सकें।

http://www.ranu.com.ar/2011/11/redisstore-and-rooms-with-socketio.html

यहाँ (https://stackoverflow.com/a/9275798/327004) उल्लेख किया है, RedisStore साथ Socket.io का उपयोग कर सत्र के साथ कुछ समस्या तक ले जा सकता है क्योंकि सत्र कार्यकर्ताओं के बीच साझा नहीं कर रहे हैं।

संबंधित मुद्दे