#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)?