मैं सराहना करता हूं कि कोई मुझे एक छोटे से संदेह के साथ मदद कर सकता है।सॉकेट.ओ प्रसारण समारोह और रेडिस पब/उप आर्किटेक्चर
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);
}
});
तो मेरा सवाल बहुत आसान है :-): दोनों आर्किटेक्चर का अंतर क्या है? कौन सा स्केलेबल है? बेहतर डिजाइन? मोड अग्रिम?
यह मुझे लगता है कि पब/उप आर्किटेक्चर प्लेटफॉर्म के लिए उपयुक्त है जो स्वाभाविक रूप से रूबी की तरह 'रीयलटाइम' का समर्थन नहीं करता है, जो नोड.जेएस के विपरीत है, जो इसे मूल रूप से समर्थन देता है।। क्या मै गलत हु?
अरे @ user1106811! आपको एक उत्तर को स्वीकृत के रूप में चिह्नित करना चाहिए। धन्यवाद – jackdbernier