Читаем Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ полностью

Клиент в сети посылает изменение строки таблицы MYTABLE. Его принимает и обрабатывает сервер. В процессе фазы AFTER UPDATE триггер посылает сообщение с именем big_event для оповещения менеджера событий, что изменение завершено.

Менеджер событий добавляет это событие в список своих событий. В это время изменение не подтверждено, и менеджер событий больше ничего не делает. В своем списке прослушивающих он отыскивает процесс x, который прослушивает это событие. Процесс x будет ожидать, пока не подтвердится одно или более событий big_event.

При выполнении COMMIT менеджер событий посылает процессу x и всем другим процессам, ожидающим событие big_event, оповещение, что big_event произошло. Даже если транзакция много раз отправляла big event, ожидающие клиенты получат одно оповещение.

Если ни один процесс не зарегистрировал интерес в big_event, менеджер событий просто игнорирует POST_EVENT. Все процессы, к настоящему моменту выдавшие EVENT_WAIT для big_event, получат оповещение немедленно. Если какой-нибудь процесс зарегистрировал свой интерес в big_event, но не ожидает этого события, менеджер событий оставляет это событие, пока процесс либо не просигнализирует об ожидании, либо не отменит свой интерес. Если заинтересованные приложения потеряют интерес, событие big_event будет удалено из этой таблицы.

Приложение может ожидать не более 15 событий в одном запросе EVENT INIT. Оно может распределить события между несколькими запросами EVENT INIT, однако в случае синхронизированных событий оно может ожидать обработки только одного запроса EVENT INIT В каждый момент времени.


Асинхронная сигнализация

Асинхронная сигнализация имеет свои ограничения. В частности, она требует, чтобы приложение ожидало оповещения бесконечное время. Это ограничение модели было устранено при поддержке асинхронной сигнализации.

В этой модели приложение также регистрирует интерес и продолжает ожидать и прослушивать, однако оно способно продолжать собственное выполнение и выполнять запросы к базе данных в процессе ожидания оповещений. Приложение имеет свою собственную очередь событий, которой оно управляет на клиентской стороне. Рис. 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() прослушивает оповещение, которое появится, когда сервер выполнит функцию обратного вызова.

Асинхронное прослушивание

Прежде чем вы сможете использовать функцию сигнализации API isc_que_evento, вам нужно выполнить функцию обратного вызова на клиенте, которую вызывал бы сервер при посылке события. Названием для такого типа функции является асинхронный перехват, или AST.


Функция AST

Функция AST предоставляет некоторую форму глобальных флагов для оповещения приложения, когда к нему обращается сервер. Она обрабатывает список событий сервера в буферах, к которым приложение может иметь доступ при управлении собственной очередью событий. Функция должна получать три аргумента:

* копию списка отправленных событий;

* длину буфера events_list;

* указатель на буфер events_iist.

Документ InterBase API Guide[128] содержит рекомендации по написанию функций AST.

Функция isc_event_biock() принимает в своем параметре isc caiiback указатель на функцию AST и в своем параметре event_function_arg- указатель на первый аргумент AST. Этот аргумент обычно получает значение счетчика событий, когда они изменяются.

Перейти на страницу:

Похожие книги

Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Данная книга посвящена программированию игр с помощью ActionScript. Здесь вы найдете подробные указания, необходимые для создания самых разных игр – аркад, головоломок, загадок и даже игровых автоматов. В тексте приведены исходные коды программ и детальные, доступно изложенные инструкции. Базовые принципы программирования ActionScript рассматриваются на примере игр, однако вы без труда сможете применить полученные знания и для разработки неигровых проектов, таких как Web-дизайн и реклама. Рекомендации Гэри Розенцвейга помогут вам не только придумывать занимательные игры и размещать их на Web-сайте, но и оптимизировать скорость их работы, а также защищать свои творения от несанкционированного копирования. Представленный в книге код несложно изменить для использования в других программах.Книга предназначена для широкого круга читателей – создателей анимационных роликов, художников-оформителей, программистов и разработчиков Web-сайтов. Издание может также выступать в качестве практического пособия по изучению ActionScript.

Гэри Розенцвейг

Программирование, программы, базы данных / Программирование / Книги по IT
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ

Эта книга представляет собой перевод третьего издания американского бестселлера Effective C++ и является руководством по грамотному использованию языка C++. Она поможет сделать ваши программы более понятными, простыми в сопровождении и эффективными. Помимо материала, описывающего общую стратегию проектирования, книга включает в себя главы по программированию с применением шаблонов и по управлению ресурсами, а также множество советов, которые позволят усовершенствовать ваши программы и сделать работу более интересной и творческой. Книга также включает новый материал по принципам обработки исключений, паттернам проектирования и библиотечным средствам.Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения.

Скотт Майерс , Скотт Мейерс

Программирование, программы, базы данных / Программирование / Книги по IT