轻量级且低延迟的Java网络库?

7

我正在处理一个客户端-服务器配对问题,其中多线程客户端每秒执行数千次服务器调用,并且首要任务是实现最小延迟。 吞吐量也应该很高。 客户端和服务器均使用Java编写,通信语义非常简单(put / get操作)。

这些要求下,哪个是最好的Java网络库/框架? 像Tomacat / Jetty这样的服务器似乎太重了。 我正在考虑MINA或Netty,但我不确定这些异步库在重负载下是否会提供稳定的低延迟。


你在谈论“客户端执行数千次调用”的问题。你真的只有一个(或很少的)客户端吗?基于Java NIO(Netty/Mina)的框架在处理非常多的客户端(同时连接)时表现出色,但这并不一定意味着这些客户端执行了许多调用。Tomcat使用HTTP,而Mina/Netty更适合直接使用TCP。 - MartinK
是的,我只有几个客户端应用程序,每个应用程序都有相对较少的线程(约20个)。因此,连接总数并不是非常高。 - user1128016
几乎所有非阻塞网络库在处理消息时都会产生大量垃圾。当垃圾回收干扰时,实时性变得非常困难。我建议您看一下CoralReactor,它可以产生零垃圾。 - rdalmeida
4个回答

2

你也可以尝试 Jocket。它与Java Chronicle共享一些概念,但直接针对替换标准的Socket实现。

在进程间进行来回通信(ping-pong)时,RTT延迟低于微秒。


2

我建议您尝试使用kryonet框架。


2
如果你想在同一台机器上进行通信,可以尝试类似Java Chronicle的东西,它可以支持每秒超过一百万个持久化消息,并且往返时间小于一微秒。
如果你需要在不同机器之间实现低延迟通信,就需要非常仔细地考虑你的硬件设备。对于普通硬件而言,往返延迟将达到 100 微秒或更多。而使用专门的硬件设备,则能够将往返延迟降至约20微秒。
当然,你也可以在同一台机器上进行通信,从而获得更低的延迟时间。 ;)

1
如果您需要超高性能和吞吐量,我建议使用原始套接字(请查看Socket和ServerSocket - 可能还有nio版本)。这将使您摆脱HTTP和其他协议中包含的开销。

2
Socket和ServerSocket不是“原始套接字”。它们是TCP套接字。原始套接字不能从纯Java中使用。 - user207421

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