D-Bus

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
D-Bus
Розробник(и) Freedesktop.org
Стабільний випуск 1.6.12[1] (13 червня 2013; 464 дні тому)
Написано на C
Операційна система багатоплатформовий
Тип IPC
Ліцензія GPL або AFL 2.1
Сайт www.freedesktop.org

D-Bus — система міжпроцесної комунікації, яка дозволяє додаткам в операційній системі спілкуватися один з одним.

D-Bus є частиною проекту freedesktop.org. Вона володіє високою швидкістю роботи, не залежить від робочого середовища, працює на POSIX-сумісних операційних системах, також існує версія для Windows (поки що на стадії розробки). Складається з двох частин: демона і низькорівневий API. Існують високорівневі бібліотеки для фреймворків Qt, Java, GLib, C#, Python і бібліотека для C++.

Історія[ред.ред. код]

Програми одного середовища робочого столу повинні тісно взаємодіяти між собою. У графічному середовищі KDE для цього не так давно використовувався DCOP, але інші настільні середовища (наприклад, GNOME) не мали аналогічних систем.

Існувала можливість комунікації у вигляді CORBA, SOAP або XML-RPC, але CORBA використовує велику кількість ресурсів (KDE і GNOME пройшли етап його використання за час свого існування), а SOAP і XML-RPC призначені для веб-сервісів.

Раніше GNOME використовував Bonobo, заснований на CORBA, але через залежність від GObject, Bonobo не використовувався в інших робочих середовищах, а низька швидкодія CORBA позначалося на швидкості всього середовища.

Потрібно було організувати обмін повідомленнями між додатками двох різних середовищ. Для вирішення цього завдання і був створений проект D-Bus. Реалізація виявилася вдалою і згодом було вирішено проект KDE 4 перевести на використання D-Bus.

Принципи роботи[ред.ред. код]

D-Bus надає системі декілька шин:

  1. Системна шина. Створюється при старті демона D-BUS. З її допомогою відбувається спілкування різних демонів, вона практично недоступна для користувача додатків
  2. Сесійна шина. Створюється для користувача, авторизованого в системі. Для кожної такої шини запускається окрема копія демона, за допомогою неї будуть спілкуватися програми, з якими працює користувач.

Кожне повідомлення D-BUS, передане по шині, має свого відправника і свого одержувача, їх адреси називаються шляхами об'єктів, оскільки D-BUS припускає, що кожен додаток складається з набору об'єктів, а повідомлення пересилаються не між додатками, а між об'єктами цих самих додатків .

Кожен об'єкт може підтримувати один або більше інтерфейсів, які представлені тут у вигляді іменованих груп методів і сигналів — аналогічно інтерфейсам Glib, Qt або Java.

D-BUS також передбачає концепцію сервісів. Сервіс — унікальне місце розташування додатків на шині. При запуску програма реєструє один або кілька сервісів, якими вона буде володіти до тих пір, поки самостійно не звільнить. До цього моменту жоден додаток, що претендує на той же сервіс, зайняти його не зможе. Іменуються сервіси аналогічно інтерфейсів.

Сервіси роблять доступною ще одну функцію — запуск необхідних програм у разі надходження до них повідомлень. Для цього повинна бути включена авто-активація, а в конфігурації D-BUS за цим сервісом повинен бути закріпленим один додаток. Тоді D-BUS зможе його запустити при появі повідомлення.

Після закриття програми асоційовані сервіси також реконструюються, а D-BUS посилає сигнал про те, що сервіс закритий. Інші програми можуть отримувати такі сигнали і відповідним чином реагувати.

Після підключення до шини додаток повинен вказати, які повідомлення воно бажає отримувати, шляхом додавання масок збігів (matchers). Маски є наборами правил для повідомлень, які будуть доставлятися додатком, фільтрація може ґрунтуватися на інтерфейсах, шляхи об'єктів і методах. Таким чином, додатки будуть отримувати лише те, що їм необхідно, проблеми доставки в цьому випадку бере на себе D-BUS.

Повідомлення в D-BUS бувають чотирьох видів: виклики методів, результати викликів методів, сигнали і помилки. Перші призначені для виконання методів над об'єктами, підключеними до D-BUS. Посилаючи таке повідомлення, ви даєте об'єкту завдання, а після його обробки він зобов'язаний повернути вам або результат виклику, або помилку — через повідомлення відповідних типів. Сигнальні повідомлення, як і належиться, не беруть до уваги дії об'єктів, оскільки ті можуть сприймати їх як завгодно (або ж не отримувати взагалі).

Щоб повідомлення досягло певного об'єкта, потрібен спосіб послатися на об'єкт. У багатьох мовах програмування це реалізується за допомогою покажчиків. Однак вони реалізуються як адреси пам'яті, прив'язані до локального адресного простору програми, і не можуть бути передані від одного додатку іншому.

Тому в D-Bus кожен об'єкт має своє, унікальне ім'я, яке виглядає як шлях у файловій системі. Наприклад, об'єкт може бути іменований як/ org/kde/kspread/sheets/3/cells/4/5. Звичайно, найкращими є ті імена, які несуть якесь смислове навантаження, тим не менш, розробники можуть вибрати і таке/ com/mycompany/c5yo817y0c1y1c5b, якщо в цьому є певний сенс.

Імена об'єктів знаходяться у просторах імен, щоб забезпечити розмежування різних програмних модулів. До них зазвичай додається префікс, специфічний для розробника, наприклад/ org / kde.

Див. також[ред.ред. код]

Примітки[ред.ред. код]

  1. «D-Bus 1.6.12 Release announcement». 2013-06-13. Архів оригіналу за 2013-07-13. Процитовано 2013-06-19. 

Джерело[ред.ред. код]

Посилання[ред.ред. код]