2012-04-20 2 views
0

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 관련 여부가 확실하지 않습니다. 제안?

답변

0

우분투 서버 문제 인 것으로 보입니다. CentOS 또는 Mac OS X에서 문제를 복제 할 수 없습니다.

관련 문제