Асинхронная сигнализация
Асинхронная сигнализация
Асинхронная сигнализация имеет свои ограничения. В частности, она требует, чтобы приложение ожидало оповещения бесконечное время. Это ограничение модели было устранено при поддержке асинхронной сигнализации.
В этой модели приложение также регистрирует интерес и продолжает ожидать и прослушивать, однако оно способно продолжать собственное выполнение и выполнять запросы к базе данных в процессе ожидания оповещений. Приложение имеет свою собственную очередь событий, которой оно управляет на клиентской стороне. Рис. 32.4 описывает элементы установки асинхронного прослушивания.
Приложение для биржи, например, требует постоянного доступа к базе данных STOCKS для обеспечения брокеров в реальном времени информацией об изменении цен, однако оно также должно постоянно просматривать отдельные акции и переключать соответствующую процедуру Buy (купить) или sell (продать) при появлении некоторых событий.
Приложения DSQL используют вызовы API для прослушивания событий как синхронных, так и асинхронных. В DSQL не существует для них эквивалентов, а установка для интерфейсов приложений сырых составных частей является довольно сложной.
Приложение регистрирует интерес в событиях с помощью буфера параметров событий (Events Parameter Buffer, EPB), который заполняется при вызове функции isc_event_block(). Один EPB может регистрировать не более 15 событий, задавая различные EPB и список событий для каждого вызова. Именованные события должны соответствовать (с учетом регистра) событиям, которые будут отправлены. Приложения, которым нужно отвечать более чем на 15 событий, могут выполнить несколько вызовов isc_event_block().
Синхронное прослушивание с помощью API
Установка синхронного прослушивания через API похожа на то, что вы должны сделать для асинхронной сигнализации за исключением того, что при этом вызывается
функция isc_wait_for_event() вместо isc_que_event(). Как и в случае с эквивалентом в ESQL, EVENT WAIT, выполнение программы приостанавливается на время ожидания. Функция isc_wait_for_event() прослушивает оповещение, которое появится, когда сервер выполнит функцию обратного вызова.