Отслеживание dbus-соединения между сервером и клиентом - PullRequest
0 голосов
/ 04 ноября 2019

Понятие соединения dbus отслеживает соединение между данным сервером / клиентом и демоном dbus (это правильно?).

Есть ли способ отследить более высокий уровень, «соединение / сессия»между данным сервером и клиентской парой для набора взаимодействий, которые они могут иметь друг с другом?

Вариант использования: у меня есть набор API, которые предоставляет мой сервер, которые требуют, чтобы клиент сначала зарегистрировался на сервере,прежде чем вступать во взаимодействие с сервером. Сервер в свою очередь вызывает несколько методов для объекта, зарегистрированного клиентом. В этом отношении сервер находится в состоянии и должен отслеживать некоторые существенные детали о клиенте. Набор методов, представленных обоими, включает в себя сочетание методов, которые имеют ответы, и методов, которые не отвечают.

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

К вашему сведению: я использую libdbus.

1 Ответ

0 голосов
/ 05 ноября 2019

Нет, протокол D-Bus не предоставляет возможности для этого;Вы должны реализовать его самостоятельно.

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

И клиентский и серверный процессы должны отслеживать NameOwnerChanged сигналов , чтобы увидеть, если другойисчез из шины.

Наконец, я рекомендую не использовать libdbus, поскольку его API сложно использовать правильно. Более современный высокоуровневый API, такой как GDBus, будет проще использовать правильно.

...