Netty - 写入时的缓冲响应

时间:2012-04-20 00:48:47

标签: java linux netty

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

我使用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相关的,还是与网络相关的。建议?

1 个答案:

答案 0 :(得分:0)

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