Сегодня речь пойдет о моем любимом хобби - протоколах быстрого общения.
В течение последнего месяца я довольно много времени посвятил добавлению
в centericq поддержки того, что я давно
называл стандартом интернет-пейджера будущего. Имеется в виду Jabber. До
того, как я занялся им вплотную, мне были известны только две идеи,
лежащих в основе протокола: полная открытость и повальное использование
в нем XML. Первая идея всегда вызывала только светлые чувства. Как
разработчика клиентского софта меня понять несложно. Особенно после
пережитого геморроя с очень популярными, но закрытыми сервисами, к
которым относятся все "киты" современного интернет-пейджинга - ICQ, MSN
и Yahoo!, наличие всеобъемлющей спецификации, нескольких клиентских и
серверных (sic!) программ с открытым исходным кодом воспринимается как
несказанное счастье. Отпадает необходимость играть в кошки-мышки с
разработчиками. Такое случалось уже не раз с Yahoo! и ICQ, когда в один
прекрасный день все предыдущие реализации начинали давать косяки. Просто
ребята пришли на работу с бодуна сердитые и заменили сервер чем-то, что
делает то же самое, но работает "чуть-чуть" не так. Иногда цели,
достигаемые с помощью таких выкрутасов, были более материальными.
Например, где-то с год назад начал "плохо" работать протокол ICQ,
программа-клиент для которого еще не показывала баннеры.
Раз я уже упомянул свое любимое детище, перед тем, как перейти вплотную
к Джабберу, сделаю маленькое лирическое отступление. К своей величайшей
радости, недавно обнаружил в интернете очередное приложение,
базирующееся на centericq. Народ вовсю
эксплуатирует возможность запуска внешних программ по приходу новых
сообщений. Сайт IMPSWAN (Instant Message Publishing System Without A
Name) представляет собой решение для публикации записок посредством
посылки оных на специальный ICQ контакт. Все просто. Предположим, вы в
дороге, и у вас чешутся руки наколбасить что-то для сайта (клятые
блоггеры). Пускай это будет дорожная записка. Вы идете в интернет-кафе
(ну, или каким-то более экстравагантным образом появляетесь в инете),
запускаете там асю, и отправляете свою нетленку на ICQ сервиса.
Остальное IMPSWAN делает за вас - он сохраняет записку в файле и
заливает ее на указанный вами при регистрации ftp-сервер.
Теперь Джаббер. Целесообразность применения XML поначалу казалась мне
сомнительной, призванной прежде всего добавить нотку современности в
звучание стандарта и тем самым привлечь интерес к проекту.
Действительно, ведь чтобы послать или принять текстовое сообщение,
достаточно передать информацию, идентифицирующую отправителя, плюс само
сообщение. В целях логической целостности протокола, особенно если он
основан на потоковых соединениях - TCP, добавляются еще длины обоих
полей. В этом случае использование прогрессивного формата представления
данных - XML, кажется избыточным: засчет тегов растет пакет, а клиент
пухнет из-за необходимости встраивания минимального парсера.
С другой стороны, опыт других разработчиков, и прежде всего ICQ, номер
реализации протокола у которых уже дорос до 8, показывает, что в
процессе разработки и добавления возможностей появляется необходимость в
передачи туевой хучи информации. Появляется масса пакетов со своим
собственным форматом: для передачи сообщения, ссылки, контактов, запроса
информации о пользователе, обновления собственной информации, поиска
контактов, и массы других вещей. Гибкость таких форматов можно сравнить
разве что с аналогичной характеристикой железнодорожной рельсы: если
забыл встроить какой-то параметр изначально, то вкрутить его в формат
пакета может оказаться задачей весьма непростой.
К преимуществам, которые несет использование в данном контексте XML,
относится, например, возможность добавления собственных полей, которые
только твой же клиент на другой стороне будет воспринимать, вместе с
гарантией того, что они дойдут. Да и вообще XML читабелен. Разобраться
что ты сделал не так в Jabber гораздо проще, чем прочитать hex-dump
пакета от того же ICQ, подглядывая вторым глазом в неофициальную спецификацию. Вероятность окосеть при
таком раскладе очень велика. С XML же все проще: здесь тэг, вот поле
раз, поле два, поле три, тут данные.
Стандарт протокола описывается несколькими основополагающими документами плюс набор JEP (Jabber
Enhancement Proposition - предложение по расширению Jabber). Воды в них
минимум - в основном по делу написаны. Приятно также наличие примеров
XML пакетов, демонстрирующих использование какой-либо возможности
протокола.
По возможностям Jabber, по моему скромному мнению, уже обогнал ICQ, MSN
и Yahoo!. Среди вкусностей имеется "продвинутый" многопользовательский
чат, в котором участники плюс ко всему имеют еще и роли (владелец, админ
и пользователь), что приближает идею конференц-общения к IRC. К серверу
можно подключать "агенты", в которых пользователи могут
регистрироваться, отправлять запросы, и так далее, причем список
параметров для них определяется "на лету". Таким образом реализованы,
например, поиск пользователей и шлюз в сеть MSN. К тому же, разработчики
- ребята простые, поэтому их сервер по умолчанию поддерживает
соединения, защищенные SSL.
Гибкость серверной части позволяет реализовать заветную мечту
практически всех корпоративных пользователей. Помнится, из-за того, что
стабильность связи со внешним миром в офисах фирм на Украине, где я
работал, часто оставляла желать лучшего, нам очень хотелось иметь
"прозрачный" сервер для ICQ, который в условиях упавшей сетки продолжал
бы пересылать сообщения между пользователями в локалке. С Jabber это
очень легко сделать - достаточно просто поставить у себя сервер и
соединить его с центральным jabber.com. Когда соединение с последним
поднято, контакты из внешнего мира будут доступны. В противном случае
можно будет общаться только с локальными пользователями. Однако, когда
пропадет соединение, клиентская программа, не в пример ICQ, не будет
биться в конвульсиях, пытаясь соединиться со временно недоступным
центральным серваком.
"А какой же у всей этой лабуды недостаток?" - спросите вы. Очень
своевременный вопрос. С такой отличной серверной частью недостаток может
быть только одним. Это - клиенты. Для того, чтобы потестировать
поддержку Jabber в centericq вкупе с чем-то, заведомо работающем, я
методично прошелся по всем программам, представленным на фрешмит. С день бился
головой об стены некомпилирующегося кода. В итоге, после нескольких
завершающих штрихов напильником и топором, я таки поставил konverse. А уже после этого открыл для себя psi. Честно
говоря, и сподвигло-то меня на реализацию поддержки Jabber огромное
количество несчастных, которые с нескрываемой надеждой спрашивали
планируется ли это, ибо сил нет уже терпеть без приличного клиента для
консоли. Мол, есть похожий на ircII jabberx,
но хотелось бы чего-то еще более душевного.
Причина такого медленного развития клиентской части состоит в том, что
ребята из jabber team изначально и до сих пор позиционировались
исключительно на технической части, и не сильно сосредотачивались на
конечном пользователе, которому красота XML в протоколе и открытость
спецификаций, прошу прощения за мой французский, до задницы. Куда им до
AOL/ICQ с их промоушенами а-ля "задай вопрос Бритни Спирс"!
Однако, и этот подход не так уж и плох, потому как технически
продуманный протокол в долгосрочной перспективе однозначно обречен на
успех. Как я уже сказал, у разнообразных корпоративных подонков есть уже
1000 и 1 причина поставить собственный jabber-сервер во внутриофисном
LAN. Потихоньку-полегоньку, и вы увидите, что этот стандарт будет
доминировать. Пускай не сегодня и не в следующем году..