7

我正在用 Netty 编写一个 HTTP 服务器。我在创建服务器引导程序时设置了 keep-alive 选项。 bootstrap.setOption("child.keepAlive", true); 每次编写 HTTP 响应时,我都会设置 keep-alive 标头并在写入响应后关闭通道。

rep.setHeader("Connection", "keep-alive");
channel.write(rep).addListener(ChannelFutureListener.CLOSE);

我不确定我是否应该关闭频道。

4

2 回答 2

8

假设您正在编写一个 HTTP 1.1 服务器,您应该默认在发送响应后保持连接打开。如果由于某种原因您决定关闭它,您应该包括

Connection: close

在回应中。

注意

bootstrap.setOption("child.keepAlive", true);

打开socket上的keepalive选项,与HTTP无关;相反,它是一种看门狗机制,用于在没有“真实”流量的情况下检测断开的连接。

于 2012-11-28T11:27:40.673 回答
3

请注意,您还需要指定内容的长度:

  response.headers().set(CONTENT_LENGTH, response.content().readableBytes());

以便接收者可以找出消息在哪里结束。否则,接收将继续等待消息。

而且,要清楚,你不应该写“.addListener(ChannelFutureListener.CLOSE);” 如果您希望您的连接保持打开状态。

于 2013-06-21T09:48:23.577 回答