Какая архитектура лучше всего подходит для подключения к XMPP? - PullRequest
10 голосов
/ 30 августа 2008

Если у меня есть отдельная система с ее собственной концепцией пользователей и присутствия, какая архитектура лучше всего подходит для создания моста к сети сервера XMPP? Насколько я могу судить, есть три основных способа:

  1. Действовать как сервер. Это создает одну точку прикосновения, но я боюсь, что это влияет на совместимость и потенциально усложняет в моей системе эмуляцию сервера.

  2. Выступать в качестве клиентов. Кажется, это означает, что мне нужно одно соединение на пользователя в моей системе, которое просто не будет хорошо масштабироваться.

  3. Я слышал о протоколе шлюза XMPP, но неясно, лучше ли это, чем клиентское решение. Я также не могу сказать, является ли это стандартным или нет.

Любые предложения или компромиссы будут оценены. Например, потребует ли какое-либо из этих решений запуск кода на целевом XMPP-сервере (маловероятно, что я могу это сделать).

Ответы [ 5 ]

4 голосов
/ 30 августа 2008

Протокол шлюза XMPP, о котором вы слышали, скорее всего, связан с транспортом. Транспорт - это сервер, который подключается как к серверу XMPP, так и к серверу, отличному от XMPP. Запустив транспорт, я могу использовать свой клиент Jabber для общения с кем-то, скажем, с помощью MSN Messenger.

Транспорт обычно подключается один раз к удаленной сети для каждого JID, который он видит как подключенный к сети. То есть это твой вариант 2 наоборот. Это связано с тем, что между транспортной и не-XMPP-сетью нет особых отношений; Транспорт просто действует как группа постоянных клиентов. Чтобы это работало, клиенты XMPP должны сначала зарегистрироваться на транспортном средстве, предоставив учетные данные для входа в удаленную сеть и разрешив транспорту просматривать их присутствие.

Единственная причина, по которой это имеет шансы на лучшее масштабирование, заключается в том, что для одной и той же удаленной сети может быть много транспортов. Например, мой Jabber-сервер может выполнять транспорт к MSN, другой Jabber-сервер может запускать другой и т. Д., Каждый из которых обеспечивает соединения для разных подмножеств пользователей XMPP. Хотя это распределяет нагрузку на стороне Jabber, и балансировка нагрузки в вашей системе может также распределить нагрузку, все же требуется много соединений между двумя системами.

В вашем случае, поскольку (я предполагаю) стороны, не поддерживающие XMPP, взаимодействуют друг с другом, размещение интерфейса сервера XMPP на сервере не-XMPP, вероятно, будет лучшим выбором. Этот серверный интерфейс лучше всего подходит для управления сопоставлением между JID XMPP и тем, как этот JID будет отображаться в собственной сети, вместо того, чтобы заставлять пользователей XMPP регистрироваться и т. Д.

Если вы не видели их, вы можете найти их полезными:

Надеюсь, это поможет.

2 голосов
/ 02 октября 2012

Какая архитектура должна использоваться, зависит от системы, отличной от XMPP.

  1. Работаете ли вы с системой, отличной от XMPP? Если да, вы должны найти способ добавить интерфейс XMPP-S2S к этой системе, другими словами, заставить его действовать как сервер XMPP. AOL использует этот подход для AIM. К сожалению, они ограничили свой шлюз GoogleTalk.

  2. Вы не используете систему без XMPP, но у нее есть интерфейс федерации, который вы можете использовать - i. е. ваш шлюз может взаимодействовать с другой системой как сервером и имеет собственное пространство имен. В этом случае вы можете создать шлюз, который будет действовать как объединенный сервер с обеих сторон. Поскольку я не знаю ни одного примера шлюза, использующего этот подход, но вы можете использовать его, если хотите построить общедоступный мост XMPP-SIP.

  3. Если не-XMPP-система не предоставляет интерфейс федерации, у вас нет другого выбора, кроме как действовать как группа клиентов. В мире XMPP это называется «транспорт». Различия между транспортным и обычным сервером в основном:

    • JID транспорта отображаются из другой системы (например, john.doe \ 40example.net@msngateway.example.org - действительно безобразно!)
    • Пользователи XMPP, которые хотят использовать транспорт, должны создать учетную запись в системе, отличной от XMPP, и передать учетные данные этой учетной записи транспортной службе. Протокол XMPP даже имеет расширение протокола, которое позволяет пользователям XMPP выполнять внутриполосную регистрацию транспорта.
2 голосов
/ 28 сентября 2009

Существует в основном два типа соединений между серверами (s2s). Первый называется шлюзом или транспортом, но это одно и то же. Это, вероятно, тот, который вы ищете. Я не смог найти конкретную документацию для сторон не-XMPP, но то, как XMPP думает о переводе на устаревшие серверы, находится на http://xmpp.org/extensions/xep-0100.html. Второй тип действительно не объясняется ни в каких дополнительных XEP - это обычные XMPP s2 соединения. Ищите «Связь между серверами» в RFC 3920 или RFC 3920bis для получения последнего чернового обновления.

Поскольку у вас есть собственные пользователи и ваше присутствие на вашем сервере, а это не XMPP, концепции не будут полностью отображаться в модель XMPP. Вот тут и начинается работа транспорта. Вы должны выполнить перевод из вашей модели в модель XMPP. Пока это какая-то работа, вы все равно принимаете все решения.

Что дает нам право на один из ключевых вариантов дизайна - вам нужно действительно решить, какие вещи вы будете отображать в XMPP из своего сервиса, а какие нет. Эти функции и описания вариантов использования будут определять общую структуру. Например, это как транспорт для общения со службами чата AOL или MSN? Затем вам потребуется способ сопоставить их списки, сведения о присутствии и хранить информацию о сеансе, а также логины и пароли от локальных пользователей на удаленном сервере. Это потому, что ваш транспорт должен притворяться этими пользователями и должен будет войти в систему для них.

Или, может быть, вы просто мост s2s для чужой шахматной игры на основе XMPP, поэтому вам не требуется вход на удаленный сервер, и вы можете просто действовать аналогично серверу электронной почты и передавать информацию туда и обратно , (При обычных соединениях s2s единственным сеансом, который будет сохранен, будет аутентификация SASL, используемая с удаленным сервером, но на уровне пользователя s2s просто поддерживает соединение, а не сеанс входа в систему.)

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

2 голосов
/ 12 сентября 2008

Я тоже работаю в аналогичной системе.

Я иду с маршрутом шлюза / компонента. Я рассмотрел несколько вариантов и остановился на этом.

Шлюз, по сути, является компонентом, специально предназначенным для соединения Jabber / XMPP с другой сетью. Вам придется создавать большинство вещей, которые вы принимаете как должное при использовании XMPP в качестве клиента. Вещи, как список управления.

В Интернете очень мало помощи по фактическому проектированию и созданию компонента. Как и в ответе выше, я обнаружил, что протоколы / расширения xmpp могут помочь. Основные из них:

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

Обидно, что у Djabberd такая плохая документация, поскольку их система «все является модулем» дала возможность бэкенду сервера напрямую взаимодействовать с другой сетью. Я не продвинулся в этом.

0 голосов
/ 15 сентября 2008

Еще один подход заключается в работе с поставщиком вашего сервера XMPP. Большинство из них имеют внутренние API-интерфейсы, которые делают возможным присутствие инъекций из сторонних приложений. Например, Jabber XCP предоставляет API для этого, который действительно прост в использовании.

(Раскрытие информации: я работаю в Jabber, Inc, компании, стоящей за Jabber XCP)

...