这是我的ChannelInitializer
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"}
依此类推。
我的问题是服务器将使用新的Handler()处理请求。为什么处理程序不重置成员变量
ChannelInitializer
每个Channel
将被调用一次(一旦建立了新的连接)。因此,如果您保持连接打开状态,则需要自己重置状态。