Хорошие библиотеки Java XMPP для серверной части? [закрытый]
Я надеялся реализовать простой сервер XMPP в Java.
Мне нужна библиотека, которая может анализировать и понимать запросы xmpp от клиента. Я посмотрел на Smack (упомянутый ниже) и JSO. Smack, похоже, является клиентом только поэтому, хотя это может помочь в анализе пакетов, он не знает, как реагировать на клиентов. Поддерживается ли JSO, он выглядит очень старым. Единственный перспективный путь-разорвать Openfire, который является целым коммерческим (OSS) XMPP-сервером.
Я просто надеялся на несколько строк кода поверх Нетти или мины, чтобы я мог начать обработку некоторых сообщений с провода.
Джо -
Ну ответ на то, что я пытаюсь сделать, несколько длинный - я постараюсь держать его коротким.
есть две вещи, которые только слабо связанные:
1) я хотел написать сервер XMPP, потому что я представляю себе написание пользовательского протокола для двух клиентов для связи. В основном я думал о сетевое приложение для iPhone - но я не хотел полагаться на низкоуровневые двоичные протоколы, потому что использование чего-то вроде XMPP означает, что приложение может очень быстро "вырасти" из локального приложения на основе wifi в интернет...
обмен msgs должен быть относительно низкой задержкой, поэтому, строго говоря, двоичный протокол был бы лучшим, но я чувствовал, что, возможно, стоит изучить, если XMPP не вводит слишком много накладных расходов, чтобы я мог использовать его, а затем воспользоваться преимуществами его расширяемости и гибкость позже.
2) я работаю на терракоту - так что у меня есть эта сумасшедшая склонность кластер все. Как только я начал думать о написании пользовательского кода сервера, я решил, что хочу его кластеризировать. Terracotta делает масштабирование Java POJOs тривиальным, поэтому моя мысль заключалась в создании супер простого сервера XMPP в качестве демонстрационного приложения для Terracotta. В основном каждый пользователь будет подключаться к серверу через TCP-соединение, которое будет регистрировать пользователя в hashmap. Каждый пользователь будет иметь LinkedBlockingQueue с потоком прослушивателя, принимающим сообщение из очереди. Затем любой подключенный пользователь, который хочет отправить сообщение любому другому пользователю (например, любое старое приложение чата), просто выдает сообщение XMPP (как обычно) этому пользователю через соединение. Сервер берет его, ищет соответствующий объект пользователя на карте и помещает сообщение в очередь. Поскольку очередь кластеризована, независимо от того, подключен ли конечный пользователь к одному физическому серверу или к другому физический сервер, сообщение доставляется и поток, который слушает забирает его и отправляет его обратно вниз tcp-соединение конечного пользователя.
Так что - не слишком краткое резюме я боюсь. Но именно это я и хочу сделать. Я полагаю, что я мог бы просто написать плагин для Openfire, чтобы выполнить #1, но я думаю, что он заботится о большом количестве сантехники, поэтому сложнее сделать #2 (тем более, что я надеялся на очень небольшое количество кода, которое могло бы вписаться в простой 10-20kb Maven проект.)
10 ответов:
http://xmpp.org/xmpp-software/libraries/ имеет список программных библиотек для XMPP. Вот это устаревший снимок это:
ActionScript
C
C++
C# / .NET / Mono
Эрланг
вспышка
Haskell
Java
JavaScript
Lisp
С
Perl
PHP
Python
Рубин
Tcl
Я прошел через тот же поиск. Я сначала попробовал Smack, а затем понял, что он нацелен на c2s (клиент-сервер) и не имел того, что мне нужно. Я посмотрел на Tinder, но мне не понравилась модель лицензирования (также, когда я смотрел, она была намного более сырой). Я, наконец, посмотрел на Whack и понял, что это то, что мне нужно, но этого не хватает много (вот почему Tinder появился, я думаю).
So..my решение? Раздвоенный удар, добавил некоторый код, чтобы абстрагироваться от вещей, и попытаться сделать его проще в использовании: http://github.com/Communitivity/Adirondack
Я написал библиотеку 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 } }
зажигать в реальном времени разделяет его Tinder API который является основным строительным блоком, извлеченным из OpenFire только для создания серверных компонентов и, возможно, других серверов. Он реализует основные строительные блоки XMPP, и вы можете начать оттуда.
также от воспламенения в реальном времени является Whack API который специально для создания компонентов XMPP
Whack-это XMPP с открытым исходным кодом (Jabber) библиотека компонентов для компонентов XMPP. Чистая библиотека Java, это может быть встроенные в приложения для создайте что-нибудь из полного XMPP компонент для простой интеграции с XMPP такие как отправка перехвата и действуя на определенные сообщения.
лучше всего использовать существующий сервер и добавить к нему свои функциональные возможности. Написание всего сервера с нуля, даже с использованием библиотеки, будет много сложнее, чем вы ожидаете.
можете ли вы рассказать нам больше о проблеме, которую вы пытаетесь решить? Затем мы можем указать вам соответствующий сервер и помочь вам с правильным местом для подключения.
зацени вот это:
это библиотека более низкого уровня. он находится в инкубационном состоянии, и, похоже, никто его не подталкивает. но это отличный api, и я надеюсь, что он будет прогрессировать.
Я думаю, что вы уже посмотрели на правильное решение: Openfire
Это не коммерческое решение. Это XMPP сервер на вершине мины и пристани написано на Java, выпущенном под лицензией Apache. Довольно близко к тому, что вы просили. Хотя я знаю, что вы попросили библиотеку, почему бы не использовать какое-то стабильное разработанное программное обеспечение с открытым исходным кодом, которое можно легко расширить, например openfire?
Я нашел хороший xmpp сервер на основе Java:http://www.tigase.org/
посмотреть Vorpal. Его структура Java EE 6, которая реализует протокол XEP-0114.
Я знаю, что намерение состоит в том, чтобы построить небольшой хак в ОП. Однако, если есть когда-либо интерес к его масштабированию, сквозная безопасность, так далее. Я бы предложил посмотреть на мыльницу из Coversant. Они-наш партнер. Мы используем SMACK на нашей жесткой среде виртуальной машины в реальном времени, JamaicaVM для связи с Soapbox.
кроме того, если цель состоит в том, чтобы общаться с серверным приложением, а не переопределять для этого можно использовать сервер XMPP (например, Soapbox), клиент SMACK. Это клиент к серверу XMPP, но экземпляр фактических связей может быть от клиента к клиенту через сервер XMPP.