Подтвердить что ты не робот

Частичные сообщения с SockJS в Spring -Websockets 4.2

Я использую Spring -Websockets 4.2 с SockJS.

Поскольку сообщения, полученные клиентами, могут быть довольно большими, я хотел бы использовать частичные сообщения. Мой подкласс TextWebSocketHandler переопределяет supportPartialMessages, чтобы вернуть true. Однако, поскольку SockJsWebSocketHandler, созданный с помощью Spring, не поддерживает частичные сообщения, я все равно получаю сообщение об ошибке code=1009, reason=The decoded text message was too big for the output buffer and the endpoint does not support partial messages.

В качестве обходного пути я увеличил размер буфера до 1 МБ, как описано здесь, но поскольку мне приходится поддерживать довольно большое количество клиентов (~ 2000 в то же время), для этого требуется слишком много памяти.

Есть ли способ использовать частичные сообщения с SockJS?

4b9b3361

Ответ 1

Глядя на то, что вы пытаетесь сделать, вы по существу буферизуете 2 ГБ (предположительно 1 МБ) в ОЗУ только для своих параллельных сообщений. Вам необходимо изменить инфраструктуру, масштабировать вертикально или сжать потоки сообщений. Если сжатие сообщений или масштабирование по вертикали не может быть и речи, я думаю, что лучший подход заключается в следующем:

1) Либо используйте внутреннюю балансировку нагрузки с липкими сеансами, чтобы разделить количество одновременных пользователей между разными экземплярами сервера. Или...

2) Реализуйте правильную очередь очереди сообщений с реактивной потоковой передачей, которую может извлечь ваш единственный сервер.

Ваша архитектура приложения выглядит не очень хорошо.