Библиотека сайта rus-linux.net
Фреймворк Telepathy
Глава 20 из книги "Архитектура приложений с открытым исходным кодом", том 1.
Оригинал: Telepathy
Автор: Danielle Madeley
Перевод: Н.Ромоданов
20.1. Компоненты фреймворка Telepathy
Telepathy является модульным фреймворком, в котором каждый модуль взаимодействует с другими через шину сообщений D-Bus. Причем, чаще всего через сессионную шину пользователя. Это взаимодействие подробно описано в спецификациях фреймворка Telepathy [2]. На рис.20.1 показаны следующие компоненты Telepathy:
- Менеджер соединений (Connection Manager) предоставляет интерфейс между Telepathy и отдельными коммуникационными сервисами. Например, есть менеджер соединений для XMPP, для SIP, для IRC, и т.д. Добавление поддержки нового протокола в Telepathy представляет собой написание нового менеджер соединений.
- Сервис менеджера аккаунтов (Account Manager) отвечает за хранение коммуникационных аккаунтов пользователей и за установку, когда будет получен запрос, подключения к каждому аккаунту через соответствующий менеджер соединений.
- Роль диспетчера каналов (Channel Dispatcher) состоит в прослушивании во входящих каналах сигналов, передаваемых каждым менеджером соединений, и перенаправлении их к клиентам, которые указали, что они могут обрабатывать данный тип канала, например текстовые сообщения, голосовые и видео сообщения, выполнять передачу файлов, использовать туннели.
- Клиентские программы или клиенты фреймворка Telepathy обрабатывают или наблюдают за коммуникационными каналами. К их числу относятся как пользовательские интерфейсы, например, клиенты IM и VoIP, так и сервисы, например, такой, который регистрирует сообщения чата. Клиентские программы самостоятельно регистрируются в диспетчера каналов, указывая список типов каналов, которые они хотели бы обрабатывать или за которыми они хотели наблюдать.
В текущей реализации фреймворка Telepathy, менеджер аккаунтов и диспетчер каналов представлены в виде единого процесса, который называется центром управления (Mission Control).
Рис.20.1: Пример компонентов фреймворка Telepathy
Такая модульная архитектура основывается на философии Дага Макилроя (Doug McIlroy): «Пишите программы, которые делают что-то одно, и делают это хорошо», и имеет несколько важных преимуществ:
- Устойчивость к ошибкам (Robustness): Ошибка в одном из компонентов не должна приводить к краху всего сервиса.
- Легкость разработки (Ease of development): Компоненты в работающей системе могут заменяться, что не должно влиять на другие компоненты. Должна быть возможность проверять версию разрабатываемого модуля и сравнивать ее с версиями других модулей, которые работают надлежащим образом.
- Независимость от языка программирования (Language independence): Компоненты могут быть написаны на любом языке программирования, для которого есть привязка (binding) к шине D-Bus. Если данный протокол лучше всего реализован на каком-то конкретном языке, вы можете написать на этом языке свой собственный менеджер соединений и он будет доступен для всех клиентов фреймворка Telepathy. Точно также, если вы решили разработать свой собственный пользовательский интерфейс на каком-то конкретном языке, то у вас имеется доступ ко всем имеющимся протоколам.
- Лицензионная независимость (License independence): Компоненты могут использовать различные лицензии, которые были бы несовместимыми, если бы всё работало в одном процессе.
- Независимость от интерфейсов (Interface independence): Поверх одних и тех же компонентов Telepathy можно разрабатывать большое количество пользовательских интерфейсов. Это позволяет пользоваться нативными интерфейсами в среде рабочего стола и в аппаратно реализуемых устройствах (например, GNOME, KDE, Meego, Sugar).
- Безопасность (Security): Компоненты работают в различных адресных пространствах с весьма ограниченными правами. Например, типичному менеджеру соединений нужен всего лишь доступ к сети и к сессионной шине D-Bus, что позволяет использовать нечто, похожее на SELinux, для ограничения доступа к компонентам.
Менеджер соединений управляет некоторым количеством соединений, каждое соединение представляет собой логическое подключение к некоторому коммуникационному сервису. В каждом аккаунте есть одно соединение. В соединении может быть много каналов. Каналы являются механизмом, через который происходит коммуникация. С помощью каналов реализовывают обмен мгновенными сообщениями IM, голосовые или видео вызовы, пересылку файлов, или какой-либо другие операции, требующие сохранение состояния (stateful operation). Соединения и каналы более подробно рассматриваются в разделе 20.3.
Продолжение статьи: Как в Telepathy используется шина D-Bus.