Отправка сообщения с сервера xmpp vysper в java
Я настроил простой сервер и клиент, но я не знаю, как отправить сообщение с сервера xmpp клиенту. Пожалуйста, помогите мне. Если возможно, тогда предложите мне несколько ссылок.
1 ответ
Это вопрос, который на удивление часто возникает у Vysper. Есть несколько причин даже для того, чтобы задать вопрос, одна из которых, по-моему, заключается в том, что веб-сервер HTTP на самом деле работает таким образом, что он создает и отправляет контент (HTML, CSS и т. Д.) Агенту, также называемому веб-браузером.
В основанных на сообщениях протоколах, таких как электронная почта и чат, это немного отличается.
Электронные письма создаются и используются агентами или почтовыми клиентами. Серверы в основном действуют только как Message Brokers (http://en.wikipedia.org/wiki/Message_broker), включая такие аспекты, как аутентификация, фильтрация, хранение и т. Д. Редко они создают свои собственные сообщения электронной почты из себя. Часто несколько центральных учетных записей (например, order@acme.com, support@acme.com) создают большую часть электронных писем, что означает, что фактические сообщения создаются почтовым клиентом и доставляются сервером от имени клиента. (Кроме того, электронная почта /SMTP специализируется на том, чтобы клиенты отправляли электронную почту непосредственно на почтовый сервер получателя, что является кошмаром под названием /spam/.)
В общем, XMPP здесь без разницы. Клиенты XMPP-чата подключаются, отправляют и получают сообщения. Сервер XMPP обрабатывает сообщения. Итак, чтобы ответить на ваш вопрос, в большинстве случаев достаточно и предлагается иметь центральную учетную запись для связи со всеми другими учетными записями. Это самое простое и лучшее решение.
Тем не менее, XMPP предлагает немного больше, чем чат. Он имеет расширения для wizzard-подобных рабочих процессов на основе форм, публикации / подписки и администрирования / команд.
Вы можете добавить свое собственное расширение, если вам действительно нужно:
Например, посмотрите на расширение VCard здесь: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0054_vcardtemp/
Прежде всего, я бы рекомендовал создать подкласс org.apache.vysper.xmpp.modules.core.base.handler.DefaultIQHandler. Это похоже на реализацию вашего собственного сервлета с использованием подкласса DefaultServlet. Он содержит логику XMPP-строфа, которую вы хотите предоставить.
Кроме того, вам нужно подключить ваш обработчик к серверу. Это лучше всего сделать, следуя примеру в VcardTempModule, который
- предоставляет экземпляр обработчика и регистрирует его
- инициализирует постоянство (или любое другое внутреннее соединение, которое может вам понадобиться)
- делает пространство имен вашего расширения известным и объявляет ваши вещи IQ в Service Discovery
Если вам нужно постоянство, взгляните на VcardTempPersistenceManager.
Осталось сделать так, чтобы ваш модуль был известен серверу. Если вы используете Spring, добавьте одну строку в конфигурацию Spring. Если вы используете встроенный подход, вам нужно будет вызвать эквивалент server.addModule(new VcardTempModule()); как это делается в org.apache.vysper.xmpp.server.ServerMain
Теперь, если вы хотите отправлять новые разделы (сообщения), которые не являются реакцией на другие разделы, проходящие через сервер, вам также необходимо запустить собственный поток, который может создавать и отправлять разделы.
Но опять же, предпочтительным способом является создание клиентами всех сообщений.