Netty에서 서버 및 "자식"소켓 모두에 대해 tcpNoDelay
을 true로 설정하는 응용 프로그램이 있습니다. -vN
(N은 클라이언트 버퍼를 사용하지 않음)으로 서버에 "컬"하고 데이터를 채널에 천천히 쓰면 일부 버퍼 한계에 도달 할 때까지 클라이언트에 전파되지 않고 클라이언트에 푸시됩니다. 나는 Chunked 데이터를 다시 쓰고 있음을 알아야한다. (그래서 클라이언트는 닫을 때까지 연결 상태를 유지한다.)쓰기에 대한 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)
통화 바로 앞에 있습니다.
OS 관련, Java 관련 또는 Netty 관련 여부가 확실하지 않습니다. 제안?