События и подписки
Описанные ниже команды поддерживают асинхронные серверные уведомления
клиентов, сигнализируемые с помощью box.broadcast().
Серверы, поддерживающие эту новую возможность, устанавливают флаг
IPROTO_FEATURE_WATCHERS в ответ на команду IPROTO_ID. При закрытии
соединения все зарегистрированные для него наблюдатели снимаются с
регистрации.
Протокол удаленного наблюдателя (подписки на события) работает следующим образом:
- Клиент отправляет пакет
IPROTO_WATCHдля подписки на обновления указанного ключа, определенного на сервере. - Сервер отправляет пакет
IPROTO_EVENTподписанному клиенту после регистрации. Пакет содержит имя ключа и его текущее значение. После этого пакет отправляется каждый раз при обновлении значения ключа с помощьюbox.broadcast(), при условии, что последнее уведомление было подтверждено (см. ниже). - После получения уведомления клиент отправляет пакет
IPROTO_WATCHдля подтверждения уведомления. - Если клиент больше не хочет получать уведомления, он отменяет
подписку, отправляя пакет
IPROTO_UNWATCH.
Все три типа запросов асинхронны – принимающая сторона не отправляет пакет в ответ ни на один из них. Поэтому ни один из них не содержит номера синхронизации.
Код: 0x4a.
Регистрирует новый наблюдатель для заданного ключа уведомлений или подтверждает уведомление, если наблюдатель уже подписан. Наблюдатель получает уведомление после регистрации. После этого уведомление отправляется каждый раз при обновлении ключа. Сервер не отправляет ответ на запрос, если только не возникает ошибка при разборе пакета.
Код: 0x4b.
Снимает с регистрации наблюдателя, подписанного на заданный ключ уведомлений. Сервер не отправляет ответ на запрос, если только не возникает ошибка при разборе пакета.
Код: 0x4c.
Отправляется сервером для уведомления клиента об обновлении ключа.
IPROTO_EVENT_DATA содержит данные, отправляемые удаленному
наблюдателю. Параметр является необязательным, значение по умолчанию –
MP_NIL.