我将不胜感激,如果有人可以帮我一个小疑问。
请告诉我使用socket.io广播功能,并与Redis的发布/订阅设计架构之间的区别?
例如,在又一例子,Node.js的服务器侦听(socket.io)CRUD请求(创建)一个“关键”(型号为“待办事项”),和值“数据”。 它接受它的那一刻,它再次发出相同的用户,并广播到所有用户的听音上相同的“通道”。
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的平台,支持它本身。 。 我错了吗?