在我的基于Netty的Http Server中,我添加了
@Override
protected void initChannel(Channel channel) throws Exception {
ChannelPipeline pipeline = channel.pipeline();
pipeline.addLast("KeepAlive_Handler", new IdleStateHandler(readTimeout, 0, 0));
pipeline.addLast("Timeout_Handler", new IdleStateHandler(0, writeTimeOut, 0));
addSSLServerHandler(pipeline);
pipeline.addLast("http-decoder", new HttpRequestDecoder(4096, 16384, 16384));
pipeline.addLast("http-encoder", new HttpResponseEncoder());
pipeline.addLast("Reuqest_Handler", new RequestHandler());
}
在RequestHandler中,在处理Http请求之后,即将响应发送回客户端i,删除" Timeout_Handler"来自管道和通道连接保持打开状态,除非发生KeepAlive_Handler事件或抛出一些致命异常。
我不确定是否始终为每个Http请求调用ChannelInitializer的initChannel(),或者在某些情况下不调用它?这很重要,因为我正在删除" Timeout_Handler"在每个Http请求之后,如果没有为某些Http请求调用initChannel(),那么这些请求肯定会在没有" Timeout_Handler"的情况下处理。
答案 0 :(得分:0)
为表示连接的每个新Channel调用initChannel(...)。所以不是没有按要求调用它。