#ajax #websocket #real-time #autoscaling #spring-websocket
#ajax #websocket #в режиме реального времени #автоматическое масштабирование #spring-websocket
Вопрос:
У меня есть WebSocket, реализованный в приложении реального времени, где подключенные клиенты получают все обновления сервера без обновления страницы. Это нормально, и это работает очень хорошо. Проблема заключается в следующем:
Допустим, я использую два сервера (server1 и server2) для обслуживания клиентских запросов. Если клиент на server1 обновляет базу данных, все клиенты, подключенные к server1, получат обновления, как и ожидалось, потому что server1 знает обо всех подключенных клиентах. Однако клиенты, подключенные к server2, не получают никаких обновлений, потому что они обслуживаются server2, который не знает об обновлениях базы данных (обновления были выполнены клиентом на server1)!
Есть ли стандартный способ справиться с этим? Также предположим, что у меня много серверов.
Если это было рассмотрено ранее, я также был бы признателен за указатель на него. Спасибо
Комментарии:
1. У кого-нибудь есть какие-нибудь идеи?
Ответ №1:
За обработку значений БД, за изменения должен отвечать каждый экземпляр, подключенный к БД. В то время как ответственность за совместное использование обновлений (требуется изменение базы данных или нет) между различными клиентами должна лежать на обработчике. Для websocket обычно такие обновления обрабатываются путем записи их в общий / вспомогательный канал / очередь, такую как reddis, и все экземпляры подписаны на соответствующий канал. Всякий раз, когда какой-либо экземпляр хочет, чтобы все клиенты получали обновление, он помещает его в эту очередь, и все экземпляры могут получать и транслировать его