java为什么netty的handler成员变量在使用新handler()处理请求时不重置
这是我的通道初始化器
ch.pipeline().addLast("httpServerCodec", new HttpServerCodec());
ch.pipeline().addLast(new HttpObjectAggregator(65536));
ch.pipeline().addLast(new ChunkedWriteHandler());
ch.pipeline().addLast(business, new HttpSnoopServerHandler());
以下是HttpSnoopServerHandler代码
public class HttpSnoopServerHandler extends SimpleChannelInboundHandler<Object> {
private HttpRequest request;
/** Buffer that stores the response content */
private final StringBuilder buf = new StringBuilder();
@Override
protected void channelRead0(ChannelHandlerContext ctx, Object msg) {
// ignore process body
buf.append("{\"key1\":[\"value1\"],\"key2\":\"value2\"}");
// Write the response.
ctx.writeAndFlush(response);
}
当我第一次请求时,服务器会响应我
// 20200428163637
// http://localhost:8080/
{
"key1": [
"value1"
],
"key2": "value2"
}
请求两次,它就会回应我
{"key1":["value1"],"key2":"value2"}{"key1":["value1"],"key2":"value2"}{"key1":["value1"],"key2":"value2"}
等等
我的问题是服务器将使用新的处理程序()来处理请求。为什么处理程序不重置成员变量
# 1 楼答案
ChannelInitializer
将在每个Channel
调用一次(一旦建立了新连接)。因此,如果你保持连接打开,你需要自己重置状态