Введение

Протокол связи, протокол обмена данными

OBEX (сокращение от OBject EXchange, также известный как IrOBEX) — это протокол связи, обеспечивающий обмен двоичными объектами между устройствами. Он поддерживается Ассоциацией инфракрасных данных, но также был принят специальной группой Bluetooth и подразделением SyncML в Open Mobile Alliance (OMA). Одним из первых популярных применений OBEX был Palm III. Этот КПК и его многочисленные последователи использовали OBEX для обмена визитными карточками, данными и даже приложениями. Изначально разработанный для инфракрасной связи, OBEX теперь также используется в Bluetooth, а также через RS 232, USB, WAP и в таких устройствах, как смарт-ручки Livescribe.

Сравнение с HTTP

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

HTTP обычно работает поверх соединения TCP/IP. OBEX также может работать таким образом, но чаще всего реализуется на стеке IrLAP/IrLMP/Tiny TP на устройствах IrDA. В Bluetooth OBEX реализован на стеке Baseband/ACL/L2CAP (и, для обратной совместимости, RFCOMM). Возможны и другие подобные "привязки" OBEX, например, через USB. HTTP использует текст, понятный человеку, а OBEX использует двоичный формат, состоящий из троек "тип-длина-значение", называемых "Заголовками", для обмена информацией о запросе или объекте. Эти тройки гораздо проще обрабатывать устройствам с ограниченными ресурсами. Транзакции HTTP по своей природе не имеют состояния; как правило, клиент HTTP устанавливает соединение, отправляет один запрос, получает ответ и либо закрывает соединение, либо отправляет другие не связанные запросы. В OBEX одно транспортное соединение может поддерживать множество связанных операций. Более того, недавние дополнения к спецификации OBEX позволяют возобновить прерванную транзакцию, сохранив всю информацию о состоянии.

javax.obex

Необязательный пакет javax.obex в Java API для Bluetooth обеспечивает реализацию протокола OBEX на Java.

PyOBEX и nOBEX

PyOBEX обеспечивает частичную поддержку OBEX в Python. nOBEX — это ответвление PyOBEX с более полной поддержкой OBEX и поддержкой профиля Bluetooth Hands-Free для упрощения тестирования OBEX на автомобильных информационно-развлекательных системах.