Java中用于简单后端服务器实现的NIO库(Netty、Grizzly、kryonet等)哪一个比较好?

23

我们的前端使用简单的Jetty服务器(可能稍后会替换为Tomcat)。通过servlets,我们提供了一个公共的HTTP API(大致上是RESTful的),以暴露我们产品的功能。

在后端,我们有一个Java进程,执行多种维护任务。虽然后端进程通常在规定时间自行完成任务,但有时候前端需要唤醒后端,在后台执行某个特定任务。

哪种(N)IO库最适合这个任务?我找到了Netty、Grizzly、kryonet和普通的RMI。目前,我倾向于选择Netty,它似乎很容易使用,而且可能非常可靠。

您有过这种设置的经验吗?您会选择什么?

谢谢!


2
Undertow 是一款性能卓越的新型 Web 服务器,它是 Wildfly 应用服务器的默认 Web 服务器。 - bsmk
4个回答

17

尝试翻译这篇文章以回答你的问题。 http://blog.xebia.fr/2011/11/09/java-nio-et-framework-web-haute-performance/

作为法国著名的Java EE专家,该公司在VmWare(USI2011)赞助的法国挑战中进行了许多NIO服务器的POC。它是关于构建一个可以处理100万连接用户负载的简单问答应用程序。

他们以优异的成绩赢得了这个挑战。 他们的实现是Netty + Gemfire,他们只用MemoryAwareThreadPool替换了CachedThreadPool。

Netty似乎提供了出色的性能,并且有很好的文档。

他们还考虑了Deft,受Tornado(python/facebook)启发,但对他们来说仍然有点不成熟

编辑: 这里是评论中提供的翻译链接


1
这非常有趣。我打算去尝试找出为什么他们不得不切换到MemoryAwareThreadPool,因为这对我来说并不是很清楚。谢谢。 - Japer D.
请随意询问,他们可能会用英语回答。实际上,他们刚刚发现线程池是应用程序的瓶颈,但也许在您的应用程序中不会出现这种情况(因为该应用程序不是真正的企业应用程序,而只是一个带有轮询和其他类似功能的小型测验应用程序)。 - Sebastien Lorber

4

我的首选是Netty。它简单而灵活,非常快速,而且Netty社区非常棒。


3

我工作的公司目前正在评估CoralReactor。这是一款商业软件,但它拥有我见过的最简单的Java NIO API。我的个人观点是,Netty让事情变得太复杂了,特别是如果您想要无垃圾和单线程化,这是许多金融、广告和游戏行业企业的要求。


2

我会使用JMS将它们解耦,只需在后端上设置一些(一组)控制队列,然后让其监听即可。这里不需要编写自定义的nio api。

其中一个示例提供程序是hornetq。它可以作为进程内jms代理运行,并在底层使用Netty。


2
我认为在这里使用JSM会过度设计。如果我有多台跨越不同机器的服务器,那将是一个理想的选择。 - Japer D.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接