Я надеялся внедрить простой сервер XMPP в Java.
Мне нужна библиотека, которая может анализировать и понимать запросы xmpp от клиента. Я посмотрел на Smack (упомянутый ниже) и JSO. По-видимому, Smack является клиентом, поэтому, хотя он может помочь разбору пакетов, он не знает, как реагировать на клиентов. Является ли JSO, он выглядит очень старым. Единственным перспективным направлением является вытащить OpenFire, являющийся целым коммерческим (OSS) сервером XMPP.
Я просто надеялся на несколько строк кода поверх Netty или Mina, поэтому я мог начать обрабатывать некоторые сообщения с провода.
Joe -
Хорошо, ответ на то, что я пытаюсь сделать, несколько длинный - я постараюсь, чтобы он был коротким.
Есть две вещи, которые связаны только с этим:
1) Я хотел написать сервер XMPP, потому что я представляю себе собственный протокол для общения двух клиентов. В основном я думаю о сетевом приложении для iPhone, но я не хотел полагаться на низкоуровневые двоичные протоколы, потому что использование чего-то вроде XMPP означает, что приложение может "быстро расти" из локального приложения на основе Wi-Fi на интернет-основе...
Обмен сообщениями должен быть относительно низким, поэтому, строго говоря, бинарный протокол был бы лучшим, но я чувствовал, что, возможно, стоит изучить, если XMPP не вводит слишком много накладных расходов, чтобы я мог использовать его, а затем воспользоваться преимуществами его расширяемости и гибкости позже.
2) Я работаю на Terracotta - поэтому у меня есть этот сумасшедший согнутый кластер. Как только я начал думать о написании кода пользовательского сервера, я решил, что хочу его сгруппировать. Terracotta делает масштабирование Java POJO тривиальным, поэтому я думал о создании супер простого XMPP-сервера в качестве демонстрационного приложения для Terracotta. В основном каждый пользователь подключается к серверу через TCP-соединение, которое регистрирует пользователя в хэш-карте. У каждого пользователя будет LinkedBlockingQueue с потоком прослушивания, принимающим сообщение из очереди. Затем любой подключенный пользователь, который хочет отправить сообщение любому другому пользователю (например, любому старому чат-приложению), просто выдает сообщение XMPP (как обычно) этому пользователю по соединению. Сервер подбирает его, просматривает соответствующий объект пользователя на карте и помещает сообщение в очередь. Поскольку очередь кластеризована, независимо от того, какой пользователь назначения подключен к тому же физическому серверу или другому физическому серверу, сообщение доставляется, и поток, который прослушивает, подбирает его и отправляет обратно с целевого пользовательского соединения tcp.
Итак - не слишком мало резюме, которого я боюсь. Но это то, что я хочу делать. Полагаю, я мог бы просто написать плагин для Openfire, чтобы выполнить # 1, но я думаю, что он заботится о большом количестве сантехники, поэтому сложнее сделать # 2 (тем более, что я надеялся на очень маленький код, который мог бы вписаться в простой проект 10-20kb Maven).