Netty - 写入时的缓冲响应



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

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

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

最新更新