在java中从XMPP服务器发送消息



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

这是一个令人惊讶的经常出现在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提供的不仅仅是聊天功能。它有基于表单、发布/订阅和管理/命令的向导式工作流扩展。

你可以添加你自己的扩展,如果你真的需要:

例如,看看这里的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. 使您的扩展的命名空间已知,并宣布您的IQ的东西在服务发现

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

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

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

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

最新更新