Функция вещания socket.io и архитектура Redis pub/sub

Я был бы признателен, если бы кто-нибудь помог мне с небольшим сомнением.

В чем разница между использованием широковещательной функции socket.io и проектированием архитектуры с помощью pub/sub на Redis?

Например, в следующем примере сервер node.js прослушивает (socket.io) CRUD-запросы (создает) для «ключа» (модель «todo») и значения «данные». В тот момент, когда он его получает, он снова излучает тому же пользователю и транслирует всем пользователям, слушающим тот же «канал».

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, а именно использовать платформу pub/sub с 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, который поддерживает его изначально. . Я ошибаюсь?

7
задан user1106811 4 June 2012 в 11:39
поделиться