我在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相关的,还是与网络相关的。建议?
答案 0 :(得分:0)
似乎是Ubuntu服务器问题。无法在CentOS或Mac OS X上复制问题。