【发布时间】:2016-03-17 18:36:07
【问题描述】:
在我基于 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 请求后,即向客户端发送响应后,我从管道中删除“Timeout_Handler”,并且通道连接保持打开状态,除非发生 KeepAlive_Handler 事件或抛出一些致命异常。
我不确定的是来自 ChannelInitializer 的 initChannel() 总是为每个 Http 请求调用,或者在某些情况下它没有被调用?这很重要,因为我在每个 Http 请求之后都删除了“Timeout_Handler”,并且如果没有为某些 Http 请求调用 initChannel(),那么肯定会在没有“Timeout_Handler”的情况下处理这些请求。
【问题讨论】:
-
initChannel在创建新通道(连接)时被调用,而不是在请求之间。
标签: netty