2
리더 유휴 시간 제한을 잡을 때마다 시간 초과 오류를 작성하고 싶습니다.읽기 타임 아웃시 채널에 쓰기
public class TimeOutHandler extends IdleStateAwareChannelHandler {
@Override
public void channelIdle(ChannelHandlerContext ctx, IdleStateEvent e) {
if (e.getState() == IdleState.READER_IDLE) {
System.out.println("Reader TimeOut");
HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
response.setHeader(Names.CONTENT_TYPE, "application/json; charset=UTF-8");
response.setContent(ChannelBuffers.copiedBuffer("{\"timeout\":true}", CharsetUtil.UTF_8));
ChannelFuture future = e.getChannel().write(response);
future.addListener(ChannelFutureListener.CLOSE);
}
}
}
처리기가 작동하지만 아무 것도 채널에 쓰여지지 않습니다. 그러한 시나리오가 가능합니까?
업데이트 :
내 파이프 라인 공장 :
public class AsyncServerPipelineFactory implements ChannelPipelineFactory {
static HashedWheelTimer timer = new HashedWheelTimer();
private final ChannelHandler idleStateHandler = new IdleStateHandler(timer, 10, 20, 0);
public ChannelPipeline getPipeline() throws Exception {
ChannelPipeline pipeline = Channels.pipeline(idleStateHandler,new TimeOutHandler());
pipeline.addLast("decoder", new HttpRequestDecoder());
pipeline.addLast("encoder", new HttpResponseEncoder());
pipeline.addLast("handler", new HTTPRequestHandler());
return pipeline;
}
}
ChannelPipeline을 보여줄 수 있습니까? –
예. 부디. 내 업데이트보기 –
나에게 잘 어울리는 군. wireshark로 트래픽을 확인 했습니까? –