Как заставить приложение в режиме реального времени использовать сокет.ввод-вывод или lightstreamer и масштабирование по горизонтали

#node.js #socket.io #load-balancing

#node.js #socket.io #балансировка нагрузки

Вопрос:

У меня есть несколько вопросов с приложением реального времени. В настоящее время я создаю приложение в режиме реального времени. Я использовал socket.io , mongodb и nodejs. Это приложение хорошо работает в прототипе, но что произойдет, когда число пользователей увеличится? Я хочу увеличить горизонтальный масштаб.

например, у меня есть два сервера (сервер A, сервер B)

клиент A подключает сервер A

Клиент B подключает сервер B

Как клиент A может отправлять сообщения клиенту B? Меня смущали разные серверы, я нашел для этого использование redis. Есть ли вероятность, что достаточно redis-сервера?

В результате, что я должен использовать и какие технологии (redis, lightstreamer, jabber, socket.io ,nginx)?

Комментарии:

1. В этом вопросе нет ничего «реального времени». Не помечайте без разбора и не злоупотребляйте стандартной терминологией.

Ответ №1:

Вы не можете напрямую отправить сообщение от A до B, потому что они не подключены к одному серверу.

Решение этой проблемы заключается в обеспечении связи между двумя узловыми серверами.

Вы упомянули redis, поэтому, если вы пойдете по этому пути, у вас может быть центральный сервер redis с двумя списками (для каждого сервера). Когда клиент A хочет присоединиться к клиенту B, он отправляет на сервер A свое сообщение. Сервер A не найдет клиента B в своих локальных сокетах и отправит сообщение повторно. Рано или поздно сервер B соберет свои ожидающие сообщения от redis и отправит их клиенту B.

Это базовая реализация, которую вы можете изменить в соответствии с вашими потребностями. У вас может быть, например, один список сообщений на сервер, но почему бы и не список на пользователя (и сервер, на котором есть это

Кроме того, в качестве примечания, любое центральное хранилище данных, такое как сервер базы данных (mongo? MySQL?) может делать то же самое, что и redis. Все сводится к тому, что у вас уже есть, что вы можете иметь и какой тип настойчивости вы хотите.

Комментарии:

1. Спасибо за ваш ответ. Как вы сказали, я подумал о кластерной связи. Я могу создать сервер сокетов для кластерных серверов, но это выхлоп для сети. Как это делается в крупных проектах (WhatsApp, facebook)?