Хорошие библиотеки XMPP Java для серверной части?[закрыто]
Вопрос
Я надеялся реализовать простой XMPP-сервер на Java.
Что мне нужно, так это библиотека, которая может анализировать и понимать xmpp-запросы от клиента.Я просмотрел Smack (упомянутый ниже) и JSO.Smack, похоже, является только клиентом, поэтому, хотя он может помочь в анализе пакетов, он не знает, как реагировать на клиентов.Поддерживается ли JSO, что он выглядит очень старым.Единственный многообещающий путь - разобрать Openfire, который представляет собой полностью коммерческий XMPP-сервер (OSS).
Я просто надеялся на несколько строк кода поверх Netty или Mina, чтобы я мог начать обрабатывать некоторые сообщения в автономном режиме.
Джо -
Что ж, ответ на то, что я пытаюсь сделать, несколько длинноват - я постараюсь быть кратким.
Есть две вещи, которые лишь слабо связаны:
1) Я хотел написать XMPP-сервер, потому что я представляю себе написание пользовательского протокола для взаимодействия двух клиентов.По сути, я имею в виду сетевое приложение для iPhone, но я не хотел полагаться на низкоуровневые двоичные протоколы, потому что использование чего-то вроде XMPP означает, что приложение может очень быстро "вырасти" из локального приложения на основе Wi-Fi в интернет-приложение...
Обмен сообщениями должен иметь относительно низкую задержку, поэтому, строго говоря, двоичный протокол был бы лучшим, но я чувствовал, что, возможно, стоило бы изучить его, если бы XMPP не приводил к слишком большим накладным расходам, чтобы я мог использовать его, а затем пожинать плоды его расширяемости позже.
2) Я работаю в Terracotta - так что у меня есть сумасшедшая склонность объединять все в группы.Как только я начал подумывать о написании какого-нибудь пользовательского серверного кода, я решил, что хочу объединить его в кластер.Terracotta делает масштабирование Java POJOs тривиальным, поэтому моей мыслью было создать суперпростой XMPP-сервер в качестве демонстрационного приложения для Terracotta.По сути, каждый пользователь подключался бы к серверу по TCP-соединению, которое регистрировало бы пользователя в hashmap.У каждого пользователя будет LinkedBlockingQueue с потоком прослушивателя, принимающим сообщение из очереди.Затем любой подключенный пользователь, который хочет отправить сообщение любому другому пользователю (напримерлюбое старое приложение для чата) просто отправляет XMPP-сообщение (как обычно) этому пользователю через соединение.Сервер принимает его, ищет соответствующий пользовательский объект на карте и помещает сообщение в очередь.Поскольку очередь кластеризована, независимо от того, подключен ли конечный пользователь к тому же физическому серверу или к другому физическому серверу, сообщение доставляется, и поток, который прослушивает, перехватывает его и отправляет обратно по tcp-соединению конечного пользователя.
Так что, боюсь, не слишком краткое изложение.Но это то, что я хочу сделать.Я полагаю, я мог бы просто написать плагин для Openfire, чтобы выполнить # 1, но я думаю, что он требует много сантехники, поэтому сделать # 2 сложнее (тем более, что я надеялся на очень небольшой объем кода, который мог бы вписаться в простой проект Maven размером 10-20 КБ).
Решение
http://xmpp.org/xmpp-software/libraries/ содержит список программных библиотек для XMPP.Вот пример устаревший моментальный снимок этого:
ActionScript ( Сценарий действия )
C
C++
C # / .NET / Mono
Эрланг
Вспышка
Хаскелл
Java
JavaScript
Шепелявить
Цель-C
Perl
PHP
Питон
Рубин
Tcl
Другие советы
Я прошел тот же поиск. Сначала я попробовал Smack, а затем понял, что он нацелен на c2s (клиент-сервер) и не имеет того, что мне нужно. Я посмотрел на Tinder, но мне не понравилась модель лицензирования (также, когда я смотрел, она была намного более сырой). Я наконец посмотрел на Whack и понял, что это было то, что мне было нужно - но в нем много чего не хватает (я думаю, именно поэтому появился Tinder). Р>
Итак ... моё решение? Forked Whack, добавил некоторый код для абстрагирования вещей и попытался упростить его использование: http://github.com / Communitivity / Адирондакских
Я написал библиотеку Scala на ее основе, чтобы помочь в создании агентов на основе внешних компонентов, см. http://github.com/Communitivity/Shellack и http://github.com/Communitivity/MinimalScalaXMPPComponent
Одна из моих главных целей состояла в том, чтобы упростить написание компонента быстро. Пример такого компонента приведен ниже:
object Main {
/**
* @param args the command line arguments
*/
def main(args: Array[String]) :Unit = {
new XMPPComponent(
new ComponentConfig() {
def secret() : String = { "secret.goes.here" }
def server() : String = { "communitivity.com" }
def subdomain() : String = { "weather" }
def name() : String = { "US Weather" }
def description() : String = { "Weather component that also supported SPARQL/XMPP" }
},
actor {
loop {
react {
case (pkt:Packet, out : Actor) =>
Console.println("Received packet...\n"+pkt.toXML)
pkt match {
case message:Message =>
val reply = new Message()
reply.setTo(message.getFrom())
reply.setFrom(message.getTo())
reply.setType(message.getType())
reply.setThread(message.getThread())
reply.setBody("Received '"+message.getBody()+"', tyvm")
out ! reply
case _ =>
Console.println("Received something other than Message")
}
case _ =>
Console.println("Received something other than (Packet, actor)")
}
}
}
).start
}
}
Ignite Realtime делится своим Tinder API , который является базовым строительным блоком, извлеченным из OpenFire просто для создания серверных компонентов и, возможно, других серверов. Он реализует основные строительные блоки XMPP, и вы можете начинать с этого.
Также от Ignite Realtime есть Whack API , специально предназначенный для создания Компоненты XMPP
Whack - это открытый исходный код XMPP (Jabber) библиотека компонентов для компонентов XMPP. Чистая библиотека Java, это может быть встроены в ваши приложения для создать что-нибудь из полного XMPP компонент для простых интеграций XMPP такие как отправка перехвата и действует на определенные сообщения.
Лучше всего использовать существующий сервер и добавить на него свою функциональность. Написание всего сервера с нуля, даже с использованием библиотеки, будет много сложнее, чем вы ожидаете.
Не могли бы вы рассказать нам больше о проблеме, которую вы пытаетесь решить? Затем мы можем указать вам соответствующий сервер и помочь вам найти подходящее место для подключения.
проверить это
это библиотека нижнего уровня. он находится в статусе инкубации, и кажется, что никто не подталкивает его. но это отличный API, и я надеюсь, что он будет развиваться.
Я думаю, что вы уже нашли правильное решение: Openfire
Это не коммерческое решение. Это XMPP-сервер поверх Mina и Jetty , написанный на Java, выпущенный по лицензии Apache. Подходит довольно близко к тому, что вы просили. Хотя я знаю, что вы просили библиотеку, почему бы не использовать стабильно разработанное программное обеспечение с открытым исходным кодом, которое можно легко расширить, например openfire?
Я нашел хороший сервер xmpp на базе Java: http://www.tigase.org/ р>
Ознакомьтесь с Vorpal . Это среда Java EE 6, которая реализует протокол XEP-0114. Р>
Я знаю, что цель состоит в том, чтобы создать небольшой взлом в OP. Тем не менее, если когда-либо будет заинтересован в его масштабировании, сквозной безопасности, и т.д. Я бы посоветовал посмотреть на Soapbox от Coversant. Они наш партнер. Мы используем SMACK в нашей жесткой среде виртуальных машин в реальном времени, JamaicaVM, для связи с Soapbox.
Кроме того, если целью является связь с приложением сервера, а не переопределение сервер XMPP (например, Soapbox), для этого может использоваться SMACK-клиент. Это клиент для сервера XMPP, но может быть установлен фактический обмен данными. от клиента к клиенту через сервер XMPP.