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