Netty: должен ли я закрыть канал, если это соединение "keep-alive"?
Я пишу HTTP-сервер с Netty. Я устанавливаю параметр keep-alive при создании начальной загрузки сервера.
bootstrap.setOption("child.keepAlive", true);
Каждый раз, когда я пишу HTTP-ответ, я устанавливаю заголовок keep-alive и закрываю канал после написания ответа.
rep.setHeader("Connection", "keep-alive");
channel.write(rep).addListener(ChannelFutureListener.CLOSE);
Я не уверен, должен ли я закрыть канал.
2 ответов
предполагая, что вы пишете сервер HTTP 1.1, вы должны по умолчанию держать соединение открытым после отправки ответа. Если по какой-то причине вы решите закрыть его в любом случае, вы должны включить
Connection: close
в ответ.
отметим, что
bootstrap.setOption("child.keepAlive", true);
включает опцию keepalive на сокете и не имеет ничего общего с HTTP; скорее, это своего рода механизм сторожевого пса для обнаружения сломанных соединений в отсутствие " реального" трафик.
обратите внимание, что вам также необходимо указать длину содержимого:
response.headers().set(CONTENT_LENGTH, response.content().readableBytes());
чтобы получатель мог выяснить, где закончилось сообщение. В противном случае получатель будет просто продолжать ждать сообщения.
и, чтобы быть ясным,вы не должны писать ".addListener (ChannelFutureListener.Закрыть); " если вы хотите, чтобы ваше соединение оставалось открытым.