Профессиональное программирование на PHP

Страница 516 из 591


534 Глава 21 Расширение РНР: часть I

и позволяет пользователям подключаться к множеству именованных групп, а также используя определенную семантику (например, каждый член группы будет получать все сообщения в том же порядке, в каком их получает любой другой член группы), получать сообщения для групп. Такие строгие правила обеспечивают превосходный механизм для решения таких распределенных задач, как создание распределенных систем протоколирования с множеством читателей, систем репликации баз данных типа ведущий/ведущий, или, как в данном случае, надежной системы обмена сообщениями между многочисленными участниками.

Библиотека Spread предоставляет весьма простой С API-интерфейс, поэтому она является идеальным примером для написания вокруг нее PHP-расширения. Ниже рассматриваются следующие части С API:

int SP_connect( const char *spread_name, const char *private_name, int priority, int group_membership, mailbox *mbox, char *private_group );

int SP_disconnect( mailbox mbox );

int SP_join( mailbox mbox, const char *group ),-

int SP_multicast( mailbox mbox, service service_type,

const char *group,

intl6 mess_type, int mess_len, const char *mess ); int SP_multigroup_multicast( mailbox mbox, service'service_type,

int num_groups,

const char groups[][MAX_GROUP_NAME], int16 mess_type, const scatter *mess ); int SP_receive( mailbox mbox, service *service_type,

char sender[max_GROUP_name], int max_groups, int *num_groups, char groups[][MAX_GROUP_name], intl6 *mess_type, int *endian_mismatch, int max_mess_len, char *mess );

Функции решают ряд задач.

1. Подключение к Spread-демону.

2. Отключение от Spread-демона.

3. Присоединение к группе для получения сообщений.

4. Отправка сообщения одной группе.

5. Отправка сообщения нескольким группам.

6. Получение сообщения для своей группы.

Стратегия создания расширения в данном случае заключается в реализации функции-оболочки PHP-уровня для каждой из перечисленных выше С-функций, кроме функций SP_multicast () и SP_multigroup_multicast (), которые благодаря слабой типизации РНР идеально комбинируются в единое целое. Соединения со службой Spread будут обрабатываться с помощью некоторого ресурса.

Чтобы начать разработку PHP-класса, с помощью следующей команды необходимо сгенерировать стандартный скелетный файл:

ext_skel --extname=spread




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006