0

我在 Netty 上有一个应用程序,我设置tcpNoDelay为 true(对于服务器和“子”套接字)。当我使用(N 禁用客户端缓冲区)“卷曲”到我的服务器-vN,然后慢慢将数据写入通道时,没有任何东西传播到客户端,直到达到某个缓冲区限制,然后它被推送到客户端。我应该注意我正在写回分块数据(因此客户端保持连接直到我们关闭它)。

我使用 Wireshark 确保在达到缓冲区限制之前我没有收到任何东西发送到客户端,然后我看到一堆 TCP 数据包涌向客户端。

理想情况下,这应该是平滑的。奇怪的是,我在本地机器上运行的实例(Mac OS X Lion,Java 1.6.0_31)不会发生这种情况。仅在 Ubuntu、Java 1.6.0_20 的服务器上出现。我无法想象从 _20 到 _31 的轻微版本不匹配是原因。

正在设置的服务器选项:

nioStreamBootstrap.setOption("child.tcpNoDelay", true);
nioStreamBootstrap.setOption("child.keepAlive", true);
nioStreamBootstrap.setOption("tcpNoDelay", true);

客户“卷曲”:

curl -vN http://my.remote.server/some/path

我的日志显示了对客户端通道的写入:

--- Message received from downstream
--- Writing message upstream
--- Message received from upstream
--- Writing message downstream

(请注意,“向下游写入消息”调用紧接在channel.write(obj)调用之前)

所以我不确定它是与操作系统相关、与 Java 相关还是与 Netty 相关。建议?

4

1 回答 1

0

似乎是 Ubuntu 服务器问题。无法在 CentOS 或 Mac OS X 上复制问题。

于 2012-04-27T23:06:12.423 回答