почему переменная-член обработчика netty не сбрасывается при обработке запроса новым обработчиком () - PullRequest
0 голосов
/ 28 апреля 2020

вот мой 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"}

и т. д.

мой вопрос заключается в том, что сервер обработает новый обработчик () для обработки запроса. почему обработчик не сбрасывает переменную-член

1 Ответ

0 голосов
/ 28 апреля 2020

ChannelInitializer будет вызываться один раз за Channel (после установления нового соединения). Поэтому, если вы оставите соединение открытым, вам нужно будет самостоятельно сбросить состояние.

...