我希望用 Java 实现一个简单的 XMPP 服务器。
我需要的是一个可以解析和理解来自客户端的 xmpp 请求的库。我看过 Smack(下面提到)和 JSO。Smack 似乎只是客户端,因此虽然它可能有助于解析数据包,但它不知道如何响应客户端。JSO 是否维护它看起来很旧。唯一有希望的途径是拆开作为完整商业 (OSS) XMPP 服务器的 Openfire。
我只是希望在 Netty 或 Mina 之上有几行代码,这样我就可以开始处理一些在线消息。
乔——
那么我想要做的事情的答案有点长 - 我会尽量保持简短。
有两件事只是松散相关:
1)我想写一个 XMPP 服务器,因为我想为两个客户端编写一个自定义协议进行通信。基本上我正在考虑一个联网的 iPhone 应用程序 - 但我不想依赖低级二进制协议,因为使用 XMPP 之类的东西意味着应用程序可以从基于本地 wifi 的应用程序快速“成长”到基于互联网的应用程序...
交换的 msgs 应该是相对较低的延迟,所以严格来说二进制协议是最好的,但我觉得如果 XMPP 没有引入太多开销以便我可以使用它,然后从它的可扩展性中获益,那么它可能值得探索和以后的灵活性。
2) 我为 Terracotta 工作——所以我有一种疯狂的倾向,想把所有东西都聚集在一起。当我开始考虑编写一些自定义服务器代码时,我想我想对它进行集群。Terracotta 使扩展 Java POJO 变得微不足道,所以我的想法是构建一个超级简单的 XMPP 服务器作为 Terracotta 的演示应用程序。基本上每个用户都会通过 TCP 连接连接到服务器,这会将用户注册到哈希图中。每个用户都有一个 LinkedBlockingQueue,其中有一个侦听器线程从队列中获取消息。然后,任何想要向任何其他用户(例如任何旧的聊天应用程序)发送消息的连接用户只需通过连接向该用户发出 XMPP 消息(像往常一样)。服务器拾取它,在地图中查找相应的用户对象并将消息放入队列中。由于队列是聚集的,
所以 - 恐怕不是太短的总结。但这就是我想做的。我想我可以为 Openfire 编写一个插件来完成#1,但我认为它需要处理很多管道,所以很难做到#2(特别是因为我希望有非常少量的代码可以适合简单的 10-20kb Maven 项目)。