在我们的应用程序中,我们需要构建一个 HTTP 服务器,在启动时,大约 1,600 个持久的 HTTP 连接被各种远程服务器打开,并且数千个 HTTP POST 请求流在每个连接上快速连续发送大约 30秒 - 我们只需要几毫秒来响应每一个。30 秒后连接关闭并打开另一个连接。
我们之所以选择 Netty,是因为大多数人认为它非常适合构建高效的 HTTP 服务器。
在实现我们的 HTTP 服务器时,我们遵循了Snoop示例。
不幸的是,我们遇到了可能由 Netty 过载来解释的问题,因此我们正在重新考虑它是否配置正确,特别是在处理线程的方式方面。我们配置服务器如下:
ServerBootstrap bootstrap = new ServerBootstrap(
new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
当我们收到请求时,我们在 SimpleChannelUpstreamHandler 中调用 messageReceived() 的同一线程中处理它。
这种方法应该在我们的应用程序中工作吗?
编辑:发生故障时盒子上的平均负载为 0.05,非常低。我已经为 Java 进程分配了 4GB,但它几乎没有使用它。所以,基本上,盒子完全负载不足。