Связь между несколькими экземплярами приложения при использовании веб-сокета? - PullRequest
0 голосов
/ 21 октября 2018

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

Я создаю чат.Существует n серверов, каждый из которых содержит n пользователей / сокетов, подключенных к нему.

В чате есть функция случайного подключения, которая связывает вас со случайным пользователем, выбранным из всех серверов.

В настоящее время использование PUB / SUB через Redis для связи между серверами.

  • Является ли Redis PUB / SUB наилучшим способом управления связью между серверами, когда большая часть связи может быть между двумя серверами, а не от 1 до N.

пользователь x находится на сервере A, пользователь y находится на сервере B. Все N серверов подписаны на канал «сообщения».х хочет отправить сообщение у.Сервер А публикуется на канале «сообщения».Все N серверов светятся, когда это нужно только серверу B.Могу ли я отслеживать, к какому серверу подключен партнер x, y, с помощью Redis pub / sub и отправлять только на этот сервер. Broadcast vs Emit?

  • Как разработать протокол партнерствадо пользователей?Сначала опишите проблему ...

A -> Req (нужен партнер для пользователя x)

B <- Req </p>

C <- Req </p>

B -> Предложение (пользователь y доступен для пользователя x)

C -X (никто не доступен, ничего не делает)

A <- Предложение (обработать предложение) </p>

C <- Предложение (не имеет пользователя x, ничего не делает) </p>

A -> Принять (назначает партнера пользователя x пользователем y и сообщать другому серверу)

B (сбой сервера больше не существует, проблема)

Как сервер A узнал бы, что сервер B с y вышел из строя / или ушел.И следует продолжать поиск онлайн-пользователя.Сейчас он просто сидит, думая, что он связал своего пользователя x с другим активным пользователем.

...