Как работать с WebSocket на нескольких серверах?

#ajax #websocket #real-time #autoscaling #spring-websocket

#ajax #websocket #в режиме реального времени #автоматическое масштабирование #spring-websocket

Вопрос:

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

Допустим, я использую два сервера (server1 и server2) для обслуживания клиентских запросов. Если клиент на server1 обновляет базу данных, все клиенты, подключенные к server1, получат обновления, как и ожидалось, потому что server1 знает обо всех подключенных клиентах. Однако клиенты, подключенные к server2, не получают никаких обновлений, потому что они обслуживаются server2, который не знает об обновлениях базы данных (обновления были выполнены клиентом на server1)!

Есть ли стандартный способ справиться с этим? Также предположим, что у меня много серверов.

Если это было рассмотрено ранее, я также был бы признателен за указатель на него. Спасибо

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

1. У кого-нибудь есть какие-нибудь идеи?

Ответ №1:

За обработку значений БД, за изменения должен отвечать каждый экземпляр, подключенный к БД. В то время как ответственность за совместное использование обновлений (требуется изменение базы данных или нет) между различными клиентами должна лежать на обработчике. Для websocket обычно такие обновления обрабатываются путем записи их в общий / вспомогательный канал / очередь, такую как reddis, и все экземпляры подписаны на соответствующий канал. Всякий раз, когда какой-либо экземпляр хочет, чтобы все клиенты получали обновление, он помещает его в эту очередь, и все экземпляры могут получать и транслировать его