4

在我们的应用程序中,我们需要构建一个 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,但它几乎没有使用它。所以,基本上,盒子完全负载不足。

4

1 回答 1

0

您是否通过在 ServerBootstrap 中设置“child.nodelay”禁用了 Nagle?

(见http://static.netty.io/3.5/api/org/jboss/netty/bootstrap/ServerBootstrap.html

于 2012-12-28T17:01:58.323 回答