Websocket - куда денется следующий колбэк, если предыдущий еще не обработался?

У меня есть непонимание работы Websocket

Я использую SDK одной криптобиржи на Python для организации Websocket. Сервер отправляет моему клиенту информацию о случившихся сделках. На каждую сделку срабатывает колбэк, в котором я имею возможность как-то эту информацию обработать (посчитать технические индексы, отправить в базу данных и т.д.). Временная дельта между сделками (а значит и между вызовом колбэка) может быть ничтожной, буквально микросекунды. При этом код, который выполняет колбэк может отрабатывать медленнее, чем придет следующий вызов.

Вопрос - куда денется следующий колбэк? Пропадет? Встанет в какую-то очередь/стэк/буфер и отработает позже? Зависит от реализации или нет?


Ответы (1 шт):

Автор решения: Alexey Trukhanov

Особая благодарность выражается CrazyElf и Kromster за ценные советы!

Эксперимент

В колбэк-функцию добавляем sleep(10), тем самым гарантируя, что часть колбэков "упрется" в занятую функцию. Далее сравниваем текущее время и время события, которое приходит вместе с информацией о сделке.

Ожидаем два варианта:

  1. Разница во времени будет постоянной - это будет означать, что колбэки, которые "стучались" в занятую функцию пропали, а в функцию поступают только текущие.
  2. Разница будет нарастать - это будет означать, что колбэки ожидают освобождения функции и поступают в нее по очереди.

В результате получили второй вариант

Фидбэк от разработчиков

На серверной стороне этого Websocket организован кэш. Сервер от клиента получает информацию свободна ли колбэк функция. Если свободна - сервер пушит сообщение, если занята - сообщение отправляется в кэш и ожидает освобождения функции. На мой вопрос - есть ли ограничение у этого кэша ответ был, дословно "It does, but It will send the data eventually normally" (Да, есть, но в конечном итоге он отправит данные в обычном режиме)

Итог

При занятой колбэк-функции колбэки не теряются, а заносятся в кэш и передаются по освобождению функции.

→ Ссылка