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

时间:2013-01-04 05:03:13

标签: java xmpp apache-vysper

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

1 个答案:

答案 0 :(得分:5)

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

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

电子邮件是由代理商a.k.a.电子邮件客户端创建和使用的。服务器大多只充当消息代理(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来实现自己的Servlet一样。它包含您要提供的XMPP节逻辑。

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

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

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

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

    中完成的一样

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

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