题
我是希望能实现一个简单的。服务器。
我需要的是一个图书馆,它可以分析和了解。请求从一个客户。我已经看过嫌(下面将提到)和JSO.嫌似乎是客户只有如此的话,它可能会帮助解析数据包,它不知道如何应对客户。是JSO保持它看起来很老了。唯有希望的途径是除了拉Openfire这是整个商业(OSS)。服务器。
我只是希望一些代码行上的耐帝或Mina,这样我就可以开始处理一些消息断线。
乔-
很好的答案是什么我想要做的就是有点长-我会尽量保持简短。
有两件事情,这仅仅是松散的相关:
1)我想写一个服务器。因为我想写一个自定义的协议,为两个客户进行沟通。基本上,我想到的是一个联网的应用程序的iPhone-但是我没有想到依赖于低水平的二进制协议,因为使用的东西喜欢。味着应用程序可以在"长大"非常迅速地从一个本地的无线网络为基础的应用程序,以一种基于互联网的一个...
这封邮件交换了应该是相对较低的延迟,因此严格来讲二议定书将是最好的,但是我觉得它可能是值得探索。如果没有介绍过多的开销,这样,我可以使用它并从中获益的extensability和灵活以后。
2)我工作的兵马俑-所以我有这样的疯狂弯曲集一切。一旦我开始考虑编写一些定制服务器码,我想我想集群。兵马俑使向外扩展Java独微不足道,所以我的想法是建立一个超级简单服务器。作为一个示范程序,对陶土。基本上每个用户将连接到服务器的管理连接时,将登记册的用户进入哈希.每个用户会有一个LinkedBlockingQueue有监听器螺纹把消息的队列。然后任何连接的用户想要发送信息的任何其他用户(如任何旧的聊天应用程序的)简单的问题。消息(如往常一样)用户的连接。服务器拿起来,看起来相应的对象用户在一个地图和地方消息上的队列。由于列队集群,无论是否在目的地的用户连接到相同物理的服务器,或者不同实体服务器,消息传递和在线听捡起来并把它送回的目的地用户的tcp连接。
所以-不是太短的摘要,我害怕。但这就是我想做的事情。我想我只能写一个插件Openfire完成#1但我认为它需要照顾的很多管道所以这是很难做到#2(尤其是因为我希望对一个非常小量的代码,可以适应一个简单的10-20kb家项目)。
解决方案
http://xmpp.org/xmpp-software/libraries/ 有一个清单的软件库。.这里是一个 过时的 快照:
ActionScript
C
C++
C#/.NET/单
二郎
快闪
Haskell
Java
JavaScript
口齿不清
目标-C
Perl
PHP
蟒蛇
红宝石
Tcl
其他提示
我经历了同样的搜索。我首先尝试了Smack,然后意识到它的目标是c2s(客户端到服务器)并且没有我需要的东西。我看着Tinder,但不喜欢许可模式(当我看起来它更加原始时)。我终于看了一眼Whack并意识到这是我需要的东西 - 但是它缺少了很多(这就是我认为Tinder的原因)。
那么......我的解决方案? Forked Whack,添加了一些代码来抽象出来,并尝试使其更易于使用: http://github.com / Communitivity /阿迪朗达克
我写了一个基于它的Scala库来帮助创建基于外部组件的代理,请参阅 http://github.com/Communitivity/Shellack 和 http://github.com/Communitivity/MinimalScalaXMPPComponent
我的主要目标之一是快速编写组件。这种组件的一个例子如下:
object Main {
/**
* @param args the command line arguments
*/
def main(args: Array[String]) :Unit = {
new XMPPComponent(
new ComponentConfig() {
def secret() : String = { "secret.goes.here" }
def server() : String = { "communitivity.com" }
def subdomain() : String = { "weather" }
def name() : String = { "US Weather" }
def description() : String = { "Weather component that also supported SPARQL/XMPP" }
},
actor {
loop {
react {
case (pkt:Packet, out : Actor) =>
Console.println("Received packet...\n"+pkt.toXML)
pkt match {
case message:Message =>
val reply = new Message()
reply.setTo(message.getFrom())
reply.setFrom(message.getTo())
reply.setType(message.getType())
reply.setThread(message.getThread())
reply.setBody("Received '"+message.getBody()+"', tyvm")
out ! reply
case _ =>
Console.println("Received something other than Message")
}
case _ =>
Console.println("Received something other than (Packet, actor)")
}
}
}
).start
}
}
Ignite Realtime分享其 Tinder API ,这是从OpenFire中提取的基本构建块用于创建服务器端组件以及可能的其他服务器。它实现了基本的XMPP构建块,您可以从那里开始。
同样来自Ignite Realtime的是 Whack API ,专门用于构建XMPP组件
Whack是开源XMPP(Jabber) XMPP组件的组件库。 一个纯Java库,它可以 嵌入到您的应用程序中 从完整的XMPP创建任何东西 组件到简单的XMPP集成 如发送拦截和 对某些信息采取行动。
您最好的选择是使用现有服务器,并为其添加功能。即使使用库,从头开始编写整个服务器也会比您预期的更难批次。
您能告诉我们您正在尝试解决的问题吗?然后,我们可以为您指出一个合适的服务器,并帮助您找到合适的插件。
检查一下:
这是一个较低级别的库。它处于孵化状态,似乎没有人在推动它。但这是一个伟大的api,我希望它会进步。
我认为您已经找到了正确的解决方案: Openfire
这不是商业解决方案。它是在Apache许可下发布的用Java编写的Mina和Jetty 之上的XMPP服务器。非常接近你所要求的。 虽然我知道您要求使用库,但为什么不使用一些稳定开发的开源软件,这些软件可以像openfire一样轻松扩展?
我找到了一个基于Java的好的xmpp服务器: http://www.tigase.org/
查看 Vorpal 。它是一个实现XEP-0114协议的Java EE 6框架。
我知道目的是在OP中建立一个小黑客。 但是,如果有兴趣扩展它,端到端的安全性, 我建议从Coversant看看Soapbox。 他们是我们的伙伴。我们在硬实时虚拟机环境中使用SMACK,JamaicaVM与Soapbox进行通信。
此外,如果目的是与服务器应用程序通信,而不是重新实现 在XMPP服务器(例如Soapbox)中,可以使用SMACK客户端。 它是XMPP服务器的客户端,但实际通信的实例可以是 通过XMPP服务器从客户端到客户端。