2015-12-11 2 views
5

настоящее время я создающими горизонтально масштабируемый сервер Socket.io, который выглядит следующим образом:Горизонтально шкала socket.io с Redis

    LoadBalancer (nginx) 

     Proxy1  Proxy2  Proxy3  Proxy{N} 

BackEnd1 BackEnd2 BackEnd3 BackEnd4 BackEnd{N} 

Мой вопрос, с модулем REDIS сокетов Ио, я могу отправить сообщение к определенному сокету, подключенному к одному из прокси-серверов с одного из серверных серверов, если все они подключены к одному и тому же серверу redis? Если да, то как мне это сделать?

ответ

3

Как вы хотите масштабировать сервер socket.io, и вы использовали nginx в качестве балансировщика нагрузки, не забудьте установить sticky load balancing, другое соединение будет подключено к нескольким серверам на основе балансировки нагрузки, передав соединение с socket.io сервер. Так лучше использовать sticky load balancing

С адаптером redis socket io вы можете отправлять и получать сообщения с одним или несколькими серверами socket.io с помощью Redis Pub/Sub implementation.

Если вы сообщите мне, какая технология используется для прокси и бэкэнд, я дам вам знать больше информации об этом.

+0

Все серверы используют Node.js, я просто спрашиваю, как я могу передать клиенту с одного из серверных серверов, если все они подключены к одному и тому же магазину redis. –

2

Используя модуль socket.io-redis, все ваши серверные серверы будут использовать один и тот же пул подключенных пользователей. Вы можете испускать из Backend1, и если клиент подключен к Backend4, он получит сообщение.

Ключом для этой работы, хотя с Socket.io является использование липких сеансов на nginx, чтобы после подключения клиента он оставался на одной машине. Это связано с тем, что сокет socket.io начинается с WebSocket и нескольких длинных потоков опроса, все они должны быть на одном и том же бэкэнд-сервере для правильной работы.

Вместо использования липких сеансов вы можете использовать опцию для подключения клиентов только к использованию Websockets, и это устранит проблемы с несколькими подключениями к нескольким серверам, так как будет единственное соединение, единственное websocket. Это также приведет к тому, что ваше приложение потеряет возможность перехода на более длительный опрос вместо WebSockets.

+0

Привет, спасибо за ответ. По какой-то причине это все еще не работает для меня. Не могли бы вы взглянуть на эту тему и сообщить мне, как лучше всего продолжить? http://stackoverflow.com/questions/34325229/socket-io-wont-emit-from-other-server-using-socket-io-emitter –

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