2011-09-21 2 views
1

Netty 3.2.3 버전을 사용 중이며 특정 계산에 따라 채널을 쓰기에서 닫으 려합니다.작성 용 채널을 닫는 방법

channel.setInterestOps(channel.getInterestOps() | Channel.OP_WRITE); 

하고 다시 열면하여 :

channel.setInterestOps(channel.getInterestOps() & Channel.OP_WRITE); 

을하지만 성능 무언가에 따른 잘못된

우리가 채널을 폐쇄한다. 계산은 우리가 수행하고있는 것과 동일합니다. true/false, 잘 작동합니다.

답변

1

Channel.OP_WRITE는 정보 제공 전용입니다. Netty는 I/O 스레드가 채널에 데이터를 즉시 쓸 수 있는지 여부를 알리는 데이를 사용합니다. channel.isWritable()이 false 인 경우 Netty는 채널에서 수락 할 수있을 때까지 추가 데이터를 대기열에 넣습니다. isWritable()이 false 일 때 데이터를 계속 작성하면 결국 OutOfMemoryError가 발생할 수 있습니다.

실제로 채널을 닫고 싶지는 않지만 채널에 쓰지 않으려한다고 가정합니다. 올바른 방법은 각 보내기 후에 channel.isWritable()을 확인하거나 ChannelStateEvent (SimpleChannelUpstreamHandler.channelInterestChanged()를 재정 의하여 가능)를 수신하고 채널에 데이터를 쓰는 응용 프로그램 프로세스를 일시 중지하는 것입니다.

채널에 다시 쓰기를 시작할 수 있음을 알 수 있도록 ChannelStateEvent를 수신하려고합니다.