2013-12-05 3 views
1

Я хочу поделиться комнатами, созданными socket.io между двумя экземплярами узла, уже используя redis-store, но не смог получить io.sockets.in (ROOM_ID) .emit (MESSAGE, DATA) на другой экземпляр узла;совместное использование объекта ввода-вывода в экземплярах нескольких узлов

Я пытаюсь - Экземпляр -

io.set('store',...) 

io.on('connection',function(socket){ 
    socket.join(''room-ABCD); 
}); 

к broadcst что-то, я могу использовать

io.sockets.in('room-ABCD').emit('event',{data:{}}); 

но подобное вещание мне нужно выполнить из экземпляра B.

например, B io.set('store') аналогичен приведенному выше, но я не могу использовать io.sockets.in('room-ABCD').emit('event',{data:{}})

Мое понимание - redisStore поместит информацию о сокете/номере в redis, чтобы она была доступна для другого процесса. [Пожалуйста, исправьте, если я ошибаюсь]. сейчас, я не получаю, как идентифицировать и получать эту информацию в другом процессе узла.

спасибо.

ответ

0

Отвечая на вопросы, связанные с вопросами - one, two и этот.

Точный пункт, где мне нужно сконцентрироваться, - объединить комнату.

Я использовал client_socket.join("room_name"), но он толкает клиентскую розетку в комнату.

Теперь, попробуйте io.sockets.socket(client_socket.id).join("room_name").

Это подталкивает членов комнаты к redis, и теперь они доступны в экземпляре другого узла.

in process B io.sockets.in("room_name").emit("event_name",{data:"1"}) works.

0

Если я хорошо понимаю вашу проблему. Ваша стартовая точка была question Возможно, вы можете получить доступ к A из B (хост не redis). Таким образом, в вы можете нажать, что это вам нужно излучать на A:

LPUSH dataToEmit "{'room':'room-ABCD', 'data':'<escapeddata>'}" 

и технологом А вы выполняете BRPOP на dataToEmit и обратного вызова вы можете unjsonize и испускают, что вы хотите

может быть вы также можете отправить 1 ключ за 1 комнату. Не забывайте, что это можно использовать конкретную базу данных номер для данного материала

Я надеюсь, что это поможет вам migth

Смежные вопросы