在java中从xmpp服务器vysper发送消息

Awa*_*riq 2 java xmpp apache-vysper

我已经设置了简单的服务器和客户端,但我不知道如何从xmpp服务器向客户端发送消息.请给我一些帮助.如果可能的话,建议我一些链接.

zil*_*on1 5

对于Vysper来说,这个问题经常出现.甚至提出这个问题有几个原因,我认为一个特殊的原因是HTTP Web服务器实际上以这样的方式工作,即它创建内容(HTML,CSS等)并将其发送到代理也称为Web浏览器.

在基于消息的协议(如电子邮件和聊天)中,这有点不同.

电子邮件由代理(即电子邮件客户端)创建和使用.服务器大多只充当消息代理(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/扩展/ xep0054_vcardtemp /

最重要的是,我建议子类化org.apache.vysper.xmpp.modules.core.base.handler.DefaultIQHandler这就像通过继承DefaultServlet来实现自己的Servlet一样.它包含您要提供的XMPP节逻辑.

此外,您需要将处理程序插入服务器.这最好通过遵循VcardTempModule中的示例来完成

  1. 提供一个Handler实例并注册它
  2. 初始化持久性(或您可能需要的任何其他后端连接)
  3. 使您的扩展名称空间已知,并在Service Discovery中宣布您的IQ内容

如果需要持久性,请查看VcardTempPersistenceManager.

还有待做的是让您的模块为服务器所知.如果使用Spring,请在Spring配置中添加一行.如果使用嵌入式方法,则需要调用等效于server.addModule(new VcardTempModule()); 就像它在org.apache.vysper.xmpp.server.ServerMain中完成一样

现在,如果您想要发出新的Stanzas(消息),这些消息不是对通过服务器的其他Stanzas的反应,您还需要启动自己的Thread,它能够创建和发送Stanzas.

但同样,首选方法是让客户端创建所有消息.