服务器端WebSockets的最佳Java框架

我想创建低负载的简单服务器。 目标是让一些javascript客户端访问通过WebSockets在Java中实现的一些function。 我寻求最好的库用于它 – 它应该是简单的,健壮的等等。现在我考虑3个替代品 – jWebSocket – jetty – netty什么是最好的? 或者可能是别的什么?

提前致谢

jWebSocket现在包括Jetty 8.0引擎,包括SSL,并在其上包含许多好东西。 它提供跨浏览器和跨平台兼容的客户端甚至更多移动应用程序,例如Android,Symbian和BlackBerry。 服务器可以通过插件轻松扩展,并且已经包含很多(例如,用于身份validation/自动化,JDBC,SMTP,XMPP / Jabber,RPC,Twitter,文件共享,聊天等)。 看看吧…… http://jwebsocket.org 。 期待您的反馈。

关心亚历克斯

我将使用经过validation的Java servlet服务器:Jetty或Resin。 两者都已扩展为处理WebSockets:

Jetty WebSockets

树脂WebSockets

我个人的选择是Jetty,因为它使用起来非常简单,我在几个项目中一直使用它作为嵌入式服务器。

像Atmosphere和jWebSocket这样的街区也有一些新的孩子,但对于服务器我更喜欢使用经过validation的解决方案。 Jetty和Resin也是通用的Servlet服务器,因此您可以使用一种产品满足您的所有服务需求。

PlayFramework! 是另一个非常好的选择。

仅供参考,大气层位于Resin,GlassFish和Jetty之上。 通过在Websocket服务器之间提供Websocket可移植性,Atmosphere免于您被困在一台服务器上。 它还提供了一个客户端库,可以选择最佳的传输,以防浏览器不支持websocket。 所以你无法将Atmosphere与Jetty或Rsin进行比较

看看Atmosphere 。 这是一篇关于websocket和氛围的文章 。

虽然我很重视JWebsockets和Autobahn的实现,但我更喜欢Atmosphere。

Ramp-Up :: Ramp-Up时间很短。 Francois Arcand在测试和示例方面投入了大量精力,帮助每个人获得快速成功。 (我不知道为什么他能够如此迅速地回应我提出的任何建筑问题。令人印象深刻。)

维护视角 ::对我而言,如果软件超出主要版本1.0.0,可维护性是基础。 该项目保持在Maven-POM顶级,并具有适当构造的层次结构。 它可以防止库不兼容。 库是正确级别的参考。 那做得很好。

技术/function观点 ::它提供了一个Java SE客户端库(wasync),它可以执行本机websocket通信(onMessage)或构建在Jersey REST注释(@Path)上。 随后,这使它变得简单,有利于维护订阅的开放连接和流行的远程过程调用(RPC)范例。 合并这两种范式是一种常见的尝试。 另见http://wamp.ws/ ,它采用相同的方法。 此外,该库提供建立QoS属性,如健壮性(例如,在客户端断开连接的情况下)和可靠性(缓存未传递的消息)。 这对于专业软件来说非常有用。

也许你应该尝试Bristleback服务器 ? 使用Bristleback,您可以从几个WebSockets引擎中进行选择,例如Jetty,Netty和Tomcat。 您可以使用独立服务器以及使用WebSockets(Jetty和Tomcat 7)的Web应用程序。 Bristleback使用Spring Framework。 如果您使用过Struts,Stripes或Play!等Web框架,那么您将很容易入手。 当然,Bristleback拥有自己的JavaScript客户端库,可以更轻松地进行开发。

完全披露:我是Bristleback Server的共同创建者之一。

我还要将vert.x添加到列表中。 它可以服务器Websockets和SockJS(当浏览器不支持它们时的websocket模拟)。

更新:
Undertow http://undertow.io也支持websockets。

关注我的博客。 我会准备好在不久的将来释放。 整个事情都强调了轻量级 – 但它也很快。 我不知道它能够提升到更高的载荷。 但是我已经运行了一段时间的演示,但负载相对较低,而且我的工作效果还不错。 (我稍后会测试较重的负载并确保它可以加速。)

http://highlevellogic.blogspot.com/2011/09/websocket-server-demonstration_26.html

如果您正在寻找有关消息管理,用户分组(“会议室”)和数据同步(“共享变量”)的基础结构,您可能需要考虑使用Union Platform:

http://www.unionplatform.com

[完全披露:我是联盟的共同创造者之一]

为什么不在JMS之类的开放标准上编写应用程序,让客户端作为消息客户端坐在JMS总线上? websockets的重点是将任何本机TCP协议直接带到客户端,而不是将其从后端转换为http请求/响应。

您的后端服务将与ActiveMQ等JMS代理进行通信,并且您的客户端通过Javascript API在浏览器中说AMQP,该API看起来就像Java中的JMS API。 你需要的只是一个websocket网关,例如Kaazing有这样一个网关,它所做的就是通过websockets将你的JMS TCP流量传送到web客户端。 它们还提供扇出,以便您不会使JMS总线过载,即您只需使用少量连接到代理即可卸载一百万个浏览器客户端连接。

最重要的是,您不需要将自己绑定到任何特定平台。 坚持使用标准,这样您可以100%自由地在环境变化时更换组件。