用java从xmpp服务器vysper发送消息

用java从xmpp服务器vysper发送消息,java,xmpp,apache-vysper,Java,Xmpp,Apache Vysper,我已经设置了简单的服务器和客户端,但我不知道如何将消息从xmpp服务器发送到客户端。请给我一些帮助。如果可能的话,请给我推荐一些链接。这是Vysper经常遇到的一个令人惊讶的问题。甚至提出这个问题都有几个原因,我认为一个特别的原因是HTTP web服务器的工作方式实际上是创建内容(HTML、CSS等)并将其发送给代理a.k.a.web浏览器 在基于消息的协议(如电子邮件和聊天)中,这有点不同 电子邮件由代理(也称为电子邮件客户端)创建和使用。服务器大多只充当消息代理(http://en.wiki

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

这是Vysper经常遇到的一个令人惊讶的问题。甚至提出这个问题都有几个原因,我认为一个特别的原因是HTTP web服务器的工作方式实际上是创建内容(HTML、CSS等)并将其发送给代理a.k.a.web浏览器

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

电子邮件由代理(也称为电子邮件客户端)创建和使用。服务器大多只充当消息代理(http://en.wikipedia.org/wiki/Message_broker),包括身份验证、过滤、存储等方面。他们很少自己生成电子邮件。通常,一些中央账户(例如。order@acme.com, support@acme.com)创建大多数电子邮件,这意味着实际消息由电子邮件客户端生成,并由服务器代表客户端发送。(此外,电子邮件/SMTP具有客户端直接向接收者的电子邮件服务器发送电子邮件的特性,这是一个名为/spam/的噩梦)

一般来说,XMPP在这里没有区别。XMPP聊天客户端连接并发送和接收消息。XMPP服务器代理消息。因此,为了回答您的问题,在大多数情况下,有一个中央帐户与所有其他帐户进行通信就足够了。这是最简单、最好的解决方案

然而,XMPP提供的不仅仅是聊天。它具有基于表单、发布/订阅和管理/命令的类似wizzard的工作流扩展

如果确实需要,您可以添加自己的扩展:

例如,在此处查看VCard扩展:

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

此外,还需要将处理程序插入服务器。最好按照VcardTempModule中的示例进行操作,其中

  • 提供处理程序实例并注册它
  • 初始化持久性(或您可能需要的任何其他后端连接)
  • 使您的扩展名称空间为人所知,并在服务发现中公布您的IQ内容
  • 如果需要持久性,请查看VcardTempPersistenceManager

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

    现在,如果您想发出新的节(消息),而不是对通过服务器发送的其他节的反应,那么您还需要启动自己的线程,该线程能够创建和发送节

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