Redis Pub-Sub или Socket.IO

Я видел этот фрагмент:

На сервере

io.sockets.on('connection', function(socket) {
  const subscribe = redis.createClient();
  const publish = redis.createClient();

  socket.on('publish', function(channel, data) {
    publish.publish(channel, data);
  });

  socket.on('psubscribe', function(channel) {
    subscribe.psubscribe(channel);
  });

  subscribe.on("pmessage", function(pattern, channel, message) {
    socket.emit('message', { channel: channel, data: message });
  });
});

На клиенте

$(".action").click(function() {
  socket.emit('publish', 'game.#{gameid}.action.' + $(this).data('action'),
  JSON.stringify({ nick: "#{nick}", ts: Date.now() })
);

И мне интересно, почему? Не имеет ли Socket.IO собственный механизм вещания? Зачем выбирать Redis 'Pub-Sub над Socket.IO? Разве мы не можем просто так:

io.sockets.on('connection', function(socket) {
  socket.on('action', function(channel, data) {
    socket.broadcast.to(channel).emit(data)
  });
});

И если есть причина использовать Redis, какая польза? Постоянство?

Ответы

Ответ 1

Причина, по которой я решил использовать Redis Pub Sub с Socket.io в моем проекте Activity Activity в реальном времени (http://blog.cloudfoundry.com/2012/06/05/node-activity-streams-app-2/), объясняется тем, что я хотел иметь несколько веб-серверов (экземпляры в Cloud Foundry или dynos на Heroku). Насколько я мог видеть, Socket.io хранит сообщения в памяти (одного веб-сервера), и как он может транслироваться для клиентов, подключенных к другому веб-серверу?

Обратите внимание на post и сообщите мне, помогает ли она

Ответ 2

Redis используется здесь по крайней мере по двум причинам. Первый заключается в том, что он работает очень хорошо, как механизм публикации и подписки, в том числе возможность выбора сообщений на основе соответствия шаблонов для psubscribe. Вторая причина заключается в легкости других клиентов, которые могут публиковать и подписываться через механизм redis. Это не значит, что это невозможно, просто удобно. Это в сочетании с асинхронизностью node.js создает мощное партнерство.

Это не единственное решение, конечно, но похожее, которое работает довольно хорошо.