Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

События и подписки

Описанные ниже команды поддерживают асинхронные серверные уведомления клиентов, сигнализируемые с помощью box.broadcast(). Серверы, поддерживающие эту новую возможность, устанавливают флаг IPROTO_FEATURE_WATCHERS в ответ на команду IPROTO_ID. При закрытии соединения все зарегистрированные для него наблюдатели снимаются с регистрации.

Протокол удаленного наблюдателя (подписки на события) работает следующим образом:

  1. Клиент отправляет пакет IPROTO_WATCH для подписки на обновления указанного ключа, определенного на сервере.
  2. Сервер отправляет пакет IPROTO_EVENT подписанному клиенту после регистрации. Пакет содержит имя ключа и его текущее значение. После этого пакет отправляется каждый раз при обновлении значения ключа с помощью box.broadcast(), при условии, что последнее уведомление было подтверждено (см. ниже).
  3. После получения уведомления клиент отправляет пакет IPROTO_WATCH для подтверждения уведомления.
  4. Если клиент больше не хочет получать уведомления, он отменяет подписку, отправляя пакет IPROTO_UNWATCH.

Все три типа запросов асинхронны – принимающая сторона не отправляет пакет в ответ ни на один из них. Поэтому ни один из них не содержит номера синхронизации.

IPROTO_WATCH

Код: 0x4a.

Регистрирует новый наблюдатель для заданного ключа уведомлений или подтверждает уведомление, если наблюдатель уже подписан. Наблюдатель получает уведомление после регистрации. После этого уведомление отправляется каждый раз при обновлении ключа. Сервер не отправляет ответ на запрос, если только не возникает ошибка при разборе пакета.

SVG diagram

IPROTO_UNWATCH

Код: 0x4b.

Снимает с регистрации наблюдателя, подписанного на заданный ключ уведомлений. Сервер не отправляет ответ на запрос, если только не возникает ошибка при разборе пакета.

SVG diagram

IPROTO_EVENT

Код: 0x4c.

Отправляется сервером для уведомления клиента об обновлении ключа.

SVG diagram

IPROTO_EVENT_DATA содержит данные, отправляемые удаленному наблюдателю. Параметр является необязательным, значение по умолчанию – MP_NIL.