在我的Netty基于HTTP服务器,我添加了添加和删除写Idlestatehandler
@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请求被处理后,即响应发送回客户端,我从管线上拆下的“Timeout_Handler”并且通道连接保持打开状态,除非发生KeepAlive_Handler事件或引发一些致命异常。
我不确定是来自ChannelInitializer的initChannel()总是为每个Http请求调用,或者有些情况下它不被调用?这很重要,因为我在每个Http请求之后删除“Timeout_Handler”,并且如果initChannel()未针对某些Http请求调用,那么肯定会在没有“Timeout_Handler”的情况下处理这些请求。
无论何时创建新的通道(连接),都会调用initChannel,而不是在请求之间。 –