为什么用新的handler()处理请求时netty的handler成员变量不重置

问题描述 投票:0回答:1

这是我的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()处理请求。为什么处理程序不重置成员变量

java netty
1个回答
0
投票

ChannelInitializer每个Channel将被调用一次(一旦建立了新的连接)。因此,如果您保持连接打开状态,则需要自己重置状态。

© www.soinside.com 2019 - 2024. All rights reserved.