XMPP 是一种开放且可扩展的实时通信标准。
XMPP 带有一个在其rfc中定义的核心,它描述了用于进行即时消息传递和交换存在信息的基本协议。然而,XMPP 真正的亮点在于它的可扩展性:XMPP 定义了构建块(存在、消息和 iq 节)来创建通信协议。这些通常以扩展的形式出现。可以在此处找到当前可用的标准扩展列表。其中最重要的通常适用于所有流行的 XMPP 服务器。正是这种可扩展性使 XMPP 适合作为面向消息的中间件。
让我以Publish-Subscribe为例,这是中间件的典型模式,一旦您离开带有一些简单消息传递就足够的实体的场景,它就成为必需品。PubSub 用于实体或生产者生成要由其他实体消费者消费的信息的情况。通常,信息被写入消费者订阅的节点。订阅后,他们会在添加/更新/删除项目时收到通知。PubSub 可以优雅地涵盖大量的用例,从排队长期运行的工作并让工人处理它们,到微博。XMPP 有一个非常健壮且广泛可用的扩展,可以以标准方式处理 PubSub,在XEP-0060并提供开箱即用的工作流程来处理发布、订阅、通知和安全性。查看 XEP 中的用例会让您对整个事情的简单性有所了解。
现在,虽然大多数用例都通过使用(或滥用)现有的标准扩展来涵盖,但最终您可能需要在其他地方没有涵盖的一点额外的自定义协议。使用您选择的语言,您可以编写定义您自己的协议的XMPP 组件。然后,您将组件连接到您正在运行的 XMPP 服务器,并通过使用简单的命名空间让服务器知道您可以处理什么样的消息,并让服务器向连接到它的客户端宣传您的协议功能。您可以做到多么简单或复杂,这没有止境。缺乏更好的例子,但可能足以说明,here是我编写的一个组件,它利用 XMPP 在 Plone CMS 中进行实时协作编辑(类似于 Google 文档)。虽然细节可能会变得复杂,但我认为查看该页面上的“协议规范”会给你一个想法。
最后,关于@boday 提到的 Java 特定库,周围有一些库可以轻松上手以及 Apache Camel 集成(尽管据我所知,它只做简单的消息传递)。但请记住,在了解 XMPP 的工作原理以及能够超越使用现有库的能力方面的投资确实是值得的,并且可以带来极其强大且简单的集成。