2012-04-20 75 views
0

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

我已经使用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相关。建议?

回答

0

看起来是一个Ubuntu服务器问题。无法在CentOS或Mac OS X上复制问题。