Использование менеджера службы глобальных имен
Использование менеджера службы глобальных имен
Начиная с QNX версии 6.3 сервис глобальных имен, обеспечиваемый GNS-менеджером службы (утилитой gns), действует в сети. Используя этот сервис, нет необходимости организовывать программу как полноценный менеджер ресурсов, при этом приложение-сервер может объявлять свою службу, а приложения-клиенты могут отыскивать и использовать службы через QNET-сеть без знания таких частностей, как, например, где эта служба располагается и кто ее обеспечивает. Подробно о сервисе глобальных имен см. в [4].
Для того чтобы развернуть этот сервис, необходимо в режиме сервера запустить менеджер службы глобальных имен на том узле, где должно работать наше приложение-сервер. В режиме сервера GNS-менеджер выступает в роли некой центральной базы данных, хранящей объявленные службы, и обрабатывает запросы на поиск и установление связи с ними. На узле же, где располагается клиент, запускаем менеджер в режиме клиента, при этом он передает запросы объявления, поиска и установки связи между локальным (то есть расположенным на этом же узле) приложением-клиентом и сервером (серверами) gns.
Серверный узел:
# gns -s
Клиентский узел (узлы):
# gns -с
В результате на узлах, где запущены службы глобальных имен, появятся имена /dev/name/global и /dev/name/local. Каждый узел, на котором запущен gns-клиент или сервер, в одной и той же сети имеет один и тот же вид пространства имен на /dev/name/global. Каждый узел имеет локальное пространство имен /dev/name/local, являющееся локальным для данной машины и отличающееся от локального пространства имен на другой машине. (Кстати, помимо имен global и local под /dev/name/ появится еще имя gns_server или gns_local — имя, под которым регистрируется сам GNS-менеджер.)
Существует несколько функций API, относящихся к службе глобальных имен: name_attach(), name_open() и name_close(). Программисты, знакомые с QNX 4, сразу «узнают» в них аналоги известных им функций qnx_name_attach(), qnx_name_open() и qnx_name_close(). Приложения используют эти функции для объявления имени службы, связи со службой и отсоединения от службы.
Итак, чтобы объявить свое имя глобально в сети, приложение-сервер должно на узле, где в режиме сервера функционирует менеджер службы глобальных имен, объявить свою службу, выполнив вызов:
if (!(NameServer = name_attach(NULL, "MyService", NAME_FLAG_ATTACH_GLOBAL)))
return EXIT_FAILURE;
Флаг NAME_FLAG_ATTACH_GLOBAL указывает, что приложение-сервер объявляет свое имя глобально — в сети. Приложение, которое может подсоединить службу глобально, должно иметь право доступа root. После выполнения этого вызова в директории /dev/name/global появится подсоединенное имя MyService (если бы третий аргумент вызова был установлен в ноль, это имя оказалось бы подсоединенным к /dev/name/local и было бы доступно только локально).
Регистрируя имя в пространстве глобальных имен, функция name_attach() создает канал, идентификатор которого она возвращает в составе структуры NameServer. Отметим, что этот канал создается с определенными установленными флагами, задающими соответствующие действия системе:
• _NTO_CHF_UNBLOCK — доставлять владельцу канала импульс с кодом _PULSE_CODE_UNBLOCK и значением rcvid каждый раз, когда Reply-блокированный клиент попытается разблокироваться (скажем, по получению сигнала или по таймеру);
• _NTO_CHF_DISCONNECT — доставлять владельцу канала импульс с кодом _PULSE_CODE_DISCONNECT, когда от процесса отсоединились все установленные соединения клиента (клиент выполнил name_close() на каждый свой name_open() к имени сервера либо вообще умер);
• _NTO_CHF_COID_DISCONNECT — доставлять владельцу канала импульс с кодом _PULSE_CODE_COIDDEATH и значением coid (идентификатора соединения) для каждого соединения по этому каналу, когда канал закрывается.
Теперь, после создания канала, сервер может становиться на прием сообщений от клиентов:
rcvid = MsgReceive(NameServer->chid, &MsgBuf, sizeof MsgBuf);
Однако может так случиться, что клиент пошлет не непосредственное сообщение для сервера, а выполнит, скажем, чтение, что, по сути, тоже является отосланным сообщением. Поэтому при получении сообщений необходимо производить их «фильтрацию»:
if (MsgBuf.hdr_type >= _IO_BASE && Buffer.hdr.type <= _IO_MAX) {
MsgError(rcvid, ENOSYS);
continue;
}
Получив от клиента некое предопределенное сообщение, сервер сбрасывает флаг flagWork и выходит из петли ожидания сообщений, тем самым завершая свою работу.
С учетом этих деталей и организован нижеописанный сервер.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Код процесса-сервера (менеджера ресурсов)
Код процесса-сервера (менеджера ресурсов) Для запуска сервера на удаленном узле выполните с терминала команду:# on -f /net/Bed-Test /net/904-3/home/ZZZ/BIN/TestMGRгде Bed-Test — имя удаленного узла, 904-3 — имя локального узла, /home/ZZZ/BIN/TestMGR — путь к исполняемому файлу.Вначале сервер выполняет
Код процесса-сервера, использующего службу глобальных имен
Код процесса-сервера, использующего службу глобальных имен #include <stdio.h>#include <errno.h>#include <stdlib.h>#include <sys/dispatch h>/* На сервер могут приходить и импульсы. Как минимум. */typedef struct _pulse msg_header_t;/* Структура сообщения состоит из заголовка и буфера наших данных */typedef struct _MsgBuf
Код процесса-клиента, использующего службу глобальных имен
Код процесса-клиента, использующего службу глобальных имен #include <stdio.h>#include <errno.h>#include <stdlib.h>#include <sys/dispatch.h>/* На сервер могут приходить и импульсы. Как минимум. */typedef struct _pulse msg_header_t;/* Структура сообщения состоит из заголовка и буфера наших данных */typedef struct _MsgBuf
Использование службы каталогов Active Directory Service Interface (ADSI)
Использование службы каталогов Active Directory Service Interface (ADSI) Обсудим сначала термины "каталог" и "служба каталога", которые будут использоваться в этом разделе. Под каталогом в общем смысле этого слова подразумевается источник информации, в котором хранятся данные о некоторых
1.3. Информационная безопасность в условиях функционирования в России глобальных сетей
1.3. Информационная безопасность в условиях функционирования в России глобальных сетей Цель мероприятий в области информационной безопасности – защитить интересы субъектов информационных отношений. Интересы эти многообразны, но все они концентрируются вокруг трех
Установка глобальных параметров
Установка глобальных параметров В листинге 5.1 приведен пример содержимого файла dhcpd.conf, предназначенного для организации динамического распределения IP-адресов. Несмотря на то что данный конфигурационный файл очень прост, его можно использовать на практике для
7.5. Выбор и настройка менеджера окон
7.5. Выбор и настройка менеджера окон Если вам удалось добиться того, что X Window работает, у вас имеется масса возможностей для дальнейшей настройки. Конкретный набор этих возможностей зависит от того, какой менеджер окон вы используете. Менеджеров окон существует много, и
7.7. Использование менеджера дисплея
7.7. Использование менеджера дисплея Систему X Window можно запускать автоматически при включении компьютера, используя программу, которая называется менеджером дисплея (X Display Manager - xdm). В этом случае пользователь сразу видит привлекательную графическую среду, и нет
13.2.4. Настройка службы имен
13.2.4. Настройка службы имен С помощью команды ifconfig вы задали IP-адрес вашего компьютера, но он еще не знает своего имени (при инсталляции системы он получил обезличенное имя localhost). Существует команда hostname, которая позволяет установить (и узнать действующее в данный момент)
23-й час Использование SQL в локальных и глобальных сетях
23-й час Использование SQL в локальных и глобальных сетях В ходе этого урока мы с вами поговорим о том как использовать SQL в сю-виях реального предприятия ичи локачьной сети компании и как испочьзовать SQL в InternetОсновными на этом уроке будут следующие темы• SQL на уровне
8.5. Коэффициенты в качестве глобальных параметров
8.5. Коэффициенты в качестве глобальных параметров До сих пор вы называли глобальными параметрами только значения компонентов, то есть сопротивление резисторов, индуктивность катушек и емкость конденсаторов. Однако за понятием «глобальный» кроется гораздо больше. Один
2.9 Базовая функциональность оконного менеджера
2.9 Базовая функциональность оконного менеджера Как уже говорилось, ключевой компонент графической платформы — Икс-сервер: — захватывает оборудование, — создает по запросу других программ (которые в этой терминологии называются X-клиентами) окна и — предоставляет
2.4. Предотвращение конфликта имен с помощью пространств имен
2.4. Предотвращение конфликта имен с помощью пространств имен ПроблемаВ несвязанных между собой модулях обнаружены конфликтующие имена или требуется заранее избежать возможности таких конфликтов, создав логические группы кода.РешениеДля структурирования кода
2.7. Использование пространства имен
2.7. Использование пространства имен Предположим, что мы хотим предоставить в общее пользование наш класс Array, разработанный в предыдущих примерах. Однако не мы одни занимались этой проблемой; возможно, кем-то где-то, скажем, в одном из подразделений компании Intel был
8.6. Использование членов пространства имен А
8.6. Использование членов пространства имен А Использование квалифицированных имен при каждом обращении к членам пространств может стать обременительным, особенно если имена пространств достаточно длинны. Если бы удалось сделать их короче, то такие имена проще было бы
5.10. Использование графического файлового менеджера
5.10. Использование графического файлового менеджера Использовать файловый менеджер очень просто — если вы умеете работать с проводником Windows, тогда и с обозревателем файлов Linux тоже справитесь. Все операции с файлами и каталогами в обозревателе файлов (рис. 5.4), так же как