我將不勝感激,如果有人可以幫我一個小疑問。socket.io廣播功能和Redis的發佈/訂閱架構
請告訴我使用socket.io廣播功能,並與Redis的發佈/訂閱設計架構之間的區別?
例如,在進一步的例子中,node.js服務器正在偵聽(socket.io)「鍵」(模型'todo')的CRUD請求(創建)以及值'data'。收到它時,它會再次發送給同一個用戶,並向在同一「頻道」上收聽的所有用戶進行廣播。
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的),將根據重點渲染的模型:接收到的值:
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);
}
});
所以我的問題很簡單:-):兩種架構的區別是什麼?哪一個更具可擴展性?更好的設計?模式推進?
在我看來,pub/sub架構適用於自然不支持「實時」的平臺,如Ruby,與Node.js相比,它本身支持它。。我錯了嗎?
嘿@ user1106811!您應該將答案標記爲已接受。謝謝 – jackdbernier