Можно ли использовать циклы событий glib для IPC? - PullRequest
0 голосов
/ 23 июня 2010

Можно ли использовать циклы событий glib и каналы ili glib для IPC у одного родителя - модель многих дочерних процессов?

Родитель и дети должны иметь возможность отправлять друг другу «команды».

Можете ли вы указать мне некоторые учебники или примеры?

1 Ответ

3 голосов
/ 30 июня 2010

Да. Но оно не содержит полноценного решения IPC и, вероятно, не идеально совместимо с любой реализацией IPC. С родителем и детьми, я думаю, вы имеете в виду сервер и клиентов? Обычно вы открываете какое-то сетевое соединение или создаете канал для связи и получаете дескриптор файла (даже если вы используете высокоуровневую библиотеку, которая это скрывает). Вы можете передать этот файловый дескриптор в glib и получить обратный вызов, после чего данные будут доступны для чтения (или соединение закрыто). Некоторые популярные методы IPC, такие как CORBA и DBUS , уже имеют интеграцию с glib, поэтому вам даже не нужно беспокоиться о файловых дескрипторах и тому подобном. Цикл событий glib описан здесь . Это может показаться очень сложным по сравнению с простым использованием poll () напрямую, но, с другой стороны, оно очень переносимо.

Основное использование - создать источник с помощью g_source_new () и добавить его в основной контекст с помощью g_source_attach (), а затем добавить дескриптор файла в источник с помощью g_source_add_poll ().

Если вы еще не определились с glib, возможно, вы захотите проверить, что libevent with делает то же самое, что и glib, но (ИМХО) намного проще в использовании. Он также значительно лучше обрабатывает более 1000 одновременно работающих клиентов (по крайней мере, в Linux другие операционные системы могут даже не поддерживать это). Но, с другой стороны, он не так переносим и, вероятно, будет работать только на достаточно posix-совместимых системах.

...