# Межпроцессное взаимодействие и работа с сетью

## Буфер обмена и перетаскивание

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

Буфер обмена используется, когда пользователь явно копирует данные в приложении. В этом случае приложение захватывает буфер обмена. Когда пользователь вставляет данные в другое приложение, то это приложение запрашивает буфер обмена из первого приложения. Операции с буфером обмена полностью поддерживаются в GTK+.

Операции перетаскивания похожи, но требуют отслеживания курсора и его обновления при движении над потенциальными целями. Когда приложение уведомляется о движении курсора над ним во время перетаскивания, оно должно изменить курсор таким образом, чтобы показать может ли оно принять перетаскивание. GTK+ поддерживает перетаскивание с помощью сложного API, позволяющего легко управлять целями перетаскивания в приложениях.

Оба механизма — перетаскивание и буфер обмена, поддерживают обмен не только текстом, но и произвольными данными. Когда у приложения есть данные для обмена оно объявляет доступные форматы этих данных. Например, при копировании текста в веб-браузере, текстовый процессор может обработать данные в формате HTML, в то время как обычный текстовый редактор может принять только обычный текст без форматирования.

Необходимо обеспечить поддержку работы с буфером обмена и перетаскивания для всех данных, с которыми работает приложение. Буфер обмена и перетаскивание полезно не только для обработки текста, но и переноса между приложениями фрагментов файлов, изображений, звука. При использовании GTK+ приложения автоматически поддерживают работу с буфером обмена и перетаскивание для текстовых полей, цветовых кнопок, диалогов выбора файлов и других встроенных элементов управления. Для поддержки любого другого типа данных необходимо использовать API GTK+.

За дальнейшей информацией обратитесь к описаниями протоколов Drag-and-Drop Protocol for the X Window System, X Clipboard Explanation и The Clipboard Manager Specification.

## Система обмена сообщениями D-BUS

D-Bus — шина сообщений, которая не зависит от рабочей среды и позволяет обмениваться сообщениями различным приложениям, средой и низкоуровневыми компонентами системы. D-Bus предоставляет простой программный интерфейс для отправки сообщений отдельным службам или широковещательных сообщений всем службам. D-Bus позволяет различным типам приложений обмениваться информацией и интегрироваться друг с другом и со средой, обеспечивая лучшую функциональность и взаимодействие с пользователем.

D-Bus предоставляет шину сеанса и системную шину. Шина сеанса используется приложениями, работающими в одном сеансе пользователя, для обмена данными и уведомлении о событиях, а также интеграции с рабочим столом пользователя. Например, видеопроигрыватель может послать сообщение D-Bus, чтобы предотвратить активацию хранителя экрана во время просмотра фильма.

Системная шина единственная в системе и работает независимо от сеансов пользователей. Она может взаимодействовать с приложениями в любом сеансе, позволяя приложениям взаимодействовать с системными компонентами без работы на низком уровне. Системная шина используется для обеспечения важной функциональности, которую пользователи ожидают от системы. Например, системная шина используется для слежением за включением и выключением сетевых интерфейсов, за подключением сетевых кабелей, а также состоянием батарей ноутбука.

D-Bus разработан совместно с freedesktop.org, поэтому его можно использовать с различными приложениями и средами рабочего стола. Проект D-Bus используется во многих средах рабочего стола, поэтому с его использованием можно создавать универсальные приложения, которые идеально интегрируются со средой рабочего стола пользователя независимо от того какая именно среда рабочего стола используется.

Для получения дополнительной информации по D-Bus обратитесь к The D-BUS Tutorial and The D-BUS Specification.

## Bonobo и CORBA

Заметим, что Bonobo, libIDL и ORBit устарели; используйте D-Bus и другие средства. Смотрите выше.

Bonobo — это платформа для создания повторно используемых в приложениях компонентов. Будучи построенной на основе индустриального стандарта Общей архитектуры брокера объектных запросов (COBRA) Bonobo предоставляет интерфейсы, необходимые для создания компонентов с хорошим поведением в приложениях GNOME.

Компоненты Bonobo можно использовать в различных ситуациях для созданиям гибкого и расширяемого программного обеспечения. Например, компонент показа мультимедиа-содержимого можно внедрить в текстовый процессор, таким образом эффективно обеспечить поддержку мультимедиа без непосредственной её обработки. Компоненты Bonobo также используются для вставки апплетов в панель GNOME. С помощью Bonobo апплеты эффективно взаимодействуют с панелью, предоставляя пользователю целостный интерфейс.

Компоненты Bonono не ограничены графическими элементами управления. Bonobo использовался Evolution — почтовым клиентом и средством групповой работы — для доступа к адресной книге и календарю, что позволяет хранить информацию в одном месте, откуда её могут получить все приложения.

Bonobo — реализация COBRA, позволяющая выполнять компоненты в раздельных процессах. Компоненты могут быть написаны на различных языках и выполняться в различных средах выполнения, необходимо лишь, чтобы их интерфейсы соответствовали синтаксису языка определения интерфейсов (IDL). Гибкий дизайн COBRA позволяет компонентам выполняться даже на различных машинах в сети.

GNOME предоставляет собственную быструю и легкую реализацию CORBA — ORBit. Инструменты и библиотеки, поставляемые с GNOME позволяют написание компонентов на языке C, в то время как другие реализации COBRA исключают такую возможность.ORBit является невероятно быстродейственной реализацией CORBA.

Bonobo помогает заполнить пробелы в CORBA, предоставляя дополнительные интерфейсы и спецификации, необходимые для поддержки совместимых компонентов. Если же всё таки необходимо использовать CORBA без Bonobo, можно использовать его напрямую. Например, подсистема специальных возможностей GNOME использует CORBA для того, чтобы позволить вспомогательным инструментам наблюдать и взаимодействовать с запущенными приложениями.

Bonobo можно использовать для реализации сложных графических компонентов, которые могут быть внедрены в приложение. Тем не менее, для большинства задач межпроцессного взаимодействия GNOME всё больше использует подсистему D-Bus, так как интегрирование D-Bus в приложения значительно проще.

За дополнительной информацией о Bonobo обратитесь к Справочнику по Libbonobo иСправочнику по LibbonoboUI. За информацией об ORBit — GNOME реализацией CORBA обратитесь к Справочнику по ORBit2.

## Обнаружение служб

Обнаружение служб DNS или Zeroconf — это технология автоматического определения расположения доступных служб в сети. Zeroconf позволяет использовать ресурсы сети без необходимости явного указания адреса ресурса или ручной настройки соответствующих приложений.

Обнаружение служб DNS используется во многих компонентах GNOME и его использование далее будет расширяться. Например, Nautilus — файловый менеджер GNOME — обнаруживает службы для определения расположения различных серверов в сети. Ekiga — приложение для организации видеоконференций и телефонии в GNOME — может определять и публиковать предпочтения пользователя и находить других пользователей в локальной сети с помощью обнаружения служб.

Библиотека Avahi обеспечивает полную поддержку обнаружения служб DNS. За дополнительной информацией по Avahi обратитесь к веб-сайту Avahi.

## XML и веб-службы

В нашем мире, где постоянно усиливается взаимодействие, всё большему количеству приложений необходимо обеспечивать поддержку различных веб-служб. Иногда веб-службы просто обеспечивают дополнительную функциональность, иногда они составляют главное назначение приложения. Даже для приложений, которые долгое время были автономными, сейчас считается рациональным использование веб-служб.

Платформа GNOME предоставляет поддержку веб-служб приложениями и обеспечивает полным набором библиотек для использования, управления и преобразования XML — языка веб.

### SOAP

GNOME при помощи библиотеки libsoup обеспечивает поддержку SOAP — широко используемого протокола передачи XML сообщений через HTTP. SOAP позволяет разработчику опубликовать программные интерфейсы через веб, которые приложения могут использовать для обмена информацией, выполнения транзакций и выполнения любых других возможных действий.

SOAP может быть использован для поиска и получения информации, взаимодействия с интернет-магазином, для управления учётными записями пользователей на других системах и множества других целей. Веб сервисы используются всё больше и больше для предоставления важной функциональности, и приложения, использующие SOAP, могут обеспечить пользователю более целостную функциональность.

Библиотека libsoup содержит реализацию HTTP и набор API необходимый для создания и обработки сообщений SOAP. Она также поддерживает безопасную аутентификацию, поэтому Веб-сервисы можно использовать для доступа к секретным данным через безопасное соединение. С помощью библиотеки libsoup легко использовать веб-сервисы без необходимости вручную разбирать и интерпретировать сообщения, посылаемые по SOAP.

За дополнительной информацией обратитесь к Справочнику по libsoup.

### Обработка XML

Со дня официального представления в 1998 г. XML (eXtensible Markup Langauge) используется во всё большем количестве приложений. Он используется для широкого круга целей: от форматов документирования, например XHMTL и DocBook, до протоколов интернета, например SOAP и Jabber. XML имеет простой и чёткий базовый синтаксис, что позволяет сконцентрироваться на конкретных нуждах приложения.

GNOME поставляется с библиотекой libxml2, которая широко используется в рабочем окружении. Библиотека libxml2 обладает хорошим быстродействием и полностью совместима со стандартами XML, обеспечивая всё необходимое для работы приложений с XML.

Библиотека libxml2 предоставляет различные API для работы с XML, поэтому в приложениях можно использовать наиболее подходящий API. Кроме оригинального API, libxml2 также предоставляет основанный на обратных вызовах SAX2 API, интерфейсы потокового чтения и записи XML, и полную поддержку XPath.

Кроме поддержки механизма DTD, библиотека libxml2 полностью поддерживает верификацию документов с помощью RELAX NG, который предоставляет более гибкую модель верификации, оставаясь легким в использовании. Также частично поддерживается XML Schema — новый язык схем, представленный консорциумом W3C.

Для непосредственной работы с XML в приложении следует использовать библиотеку libxml2, что обеспечит полностью совместимую со стандартами обработку и вывод XML. Что позволит разработчикам не беспокоиться о совместимости приложений.

За подробной информацией о libxml2 обратитесь к Руководству по Libxml и Справочнику по libxml2.

### Преобразование XML с помощью XSLT

XSLT — это язык,основанный на XML, который предназначен для преобразования XML в другие форматы. XSLT основан на шаблонах, позволяющих соотносить определённые типы элементов XML и создавать соответствующие выходные элементы. Основанный на XML и XPath, XSLT позволяет разработчикам преобразовывать одно представление на основе XML в другое, более подходящее для данного приложения.

Библиотека libxslt, поставляемая с GNOME, полностью реализует XSLT и создана на базе XML и поддержки XPath в библиотеке libxml2, что обеспечивает быстродействие и полную совместимость со стандартами.

Для трансформации документов необходимо использовать библиотеку libxslt, что может существенно упростить разработку, хотя выбор XSLT для обработки XML оправдан не всегда. Библиотека libxslt позволяет добавлять расширенные элементы и функции, что может обеспечить всё необходимое для использования в конкретном приложении.

За дополнительной информацией о libxslt обратитесь к Библиотеке XSLT для языка C для Gnome.