2013-12-04 2 views
0

Я хочу иметь 2 экземпляра сервера узла «A» и «B».Трансляция с использованием Pub-Sub в экземплярах нескольких узлов

«A» будет использовать подключенные клиенты [socket.io] в комнате.

«A» опубликует событие, на которое «B» уже подписано.

При получении данного события от «A» экземпляр «B» будет транслировать сообщение в данной комнате. Хотите использовать функцию Room в socket.io

Хотите спросить, возможно ли это? Я пытаюсь redis store, но не получаю, как публиковать событие, чтобы сервер «B» получил его.

+0

относятся к полученному ответу [здесь] [1] [1]: http://stackoverflow.com/ вопросы/20396252/sharing-io-object-in-multiple-node-экземпляры/20467890 # 20467890 – Pranav

ответ

1

вы можете запустить 2 экземпляра Redis, один на сервере А и один на сервере B.

, если вы свяжете АДРЕСА на А * или 127.0.0.1, IP B, вы можете попросить сервер B к быть рабом A: slaveof <A ip adress> 6379

каждый опубликовывает сделал A будет реплицировать B, так что вы можете слушать на B Serveur к каналу и нажмите что вы хотите номер

для вас информацию, вы можете запустите сервер, чтобы протестировать следующим образом: На A:

redis-server --port 6391 --bind (B-IP) --bind 127.0.0.1 

на B:

redis-server --port 6392 --slaveof (A-IP) 6391 

Я не в полной мере испытал это решение (тестировался только на локальном хосте для удвоенного сервера), но это должно работать

, если вы хотите, чтобы заботиться о некоторые клавиши вы можете использовать psubscribe с некоторыми «ключами» в качестве имени канала. я сделал это как то раньше:

на A

publish "|key1=toto||key2=titi||key3=plop|" "nanana" 

на B

PSUBSCRIBE "*|key2=titi|*" 

как вы видите разделитель на кнопке, вы будете иметь только фильтрующую толчок

вы можете сделать что-то подобное в вашем узле/socketIo: по А

var redis = require("redis"); 
client = redis.createClient(); 
client.publish("room::"+roomID, message); 

на B

var redis = require("redis"); 
client = redis.createClient(); 
client.on("pmessage", function (pattern,channel, message){ 
    //emit on roomid(in channel) the message 
} 
client.psubscribe("room::*"); 

не испытывалась ...

+0

спасибо за ответ, Если я хочу запускать экземпляры узлов на одном сервере, тогда в этом случае клиент redis в процессе A и клиент redis в процессе B должны разговаривать друг с другом, не так ли? И redis-store полезен в любом случае? – Pranav

+0

проще и безопаснее запускать их на одном сервере, а адрес привязки на 127.0.0.1 так безопаснее.все, что происходит, на A реплицируется на B pub/sub, key, list и т. д. Я очень поклонник redis, потому что это быстро и устойчиво с некоторыми пабами/суб внутри и скриптами в lua. много дизайна возможно некоторое использование случая здесь: http: //redis.io/documentation –

+0

roger, что, попробовав это сейчас – Pranav

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