Как будет работать websocket, если клиент websocket работает слишком медленно? - PullRequest
3 голосов
/ 05 ноября 2019

У меня есть клиент websocket, который подключается к удаленному серверу. Сервер отправляет мне много данных в секунду (~ 10 000 коротких сообщений в секунду). Как я могу понять, что мой клиент веб-сокета успеет прочитать все входящие данные? Или, может, сервер может понять, что ws-клиент не читает все данные и разорвёт соединение? Как будет работать протокол websocket, когда ws-client работает слишком медленно?

1 Ответ

2 голосов
/ 05 ноября 2019

Основополагающим транспортом веб-сокетов является TCP, и эта тема координации различных скоростей отправки и получения называется управлением потоком (это особенность уровня TCP), а эта конкретная проблема известна как «медленный потребитель» (и является распространеннойпри отправке очень больших объемов данных по TCP, таких как данные финансового рынка).

Уровень TCP позволяет буферизовать в определенных точках канала связи, так что, если читатель не может идти в ногу с байтами,Сервер отправляет, байты могут быть временно сохранены в этих буферах (пока клиент не сможет их обработать). Могут быть буферы как на стороне считывателя, так и на стороне отправителя, обычно связанные с сокетом. Однако они обычно имеют фиксированный размер. Как только эти буферы заполнятся, сервер при следующей попытке отправить несколько байтов будет стоять перед выбором: либо сбросить соединение, либо подождать («заблокировать»), пока в буфере не будет места для отправки большего количества байтов.

Так что на самом деле это решение сервера, и я думаю, что, скорее всего, оно разорвет соединение (в противном случае существует риск, что все больше и больше памяти будет потребляться на сервере из-за полных буферов сокетов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...