Хорошие библиотеки XMPP Java для серверной части?[закрыто]

StackOverflow https://stackoverflow.com/questions/177514

  •  05-07-2019
  •  | 
  •  

Вопрос

Я надеялся реализовать простой 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, и я надеюсь, что он будет развиваться.

http://java.net/project/jso-jabber-stream-objects

Я думаю, что вы уже нашли правильное решение: 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top