Netty:如果它是一个“保持活跃”的连接,我应该关闭频道吗?

时间:2012-11-28 09:11:57

标签: java netty keep-alive

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

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

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

2 个答案:

答案 0 :(得分:8)

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

Connection: close

在回复中。

请注意

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

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

答案 1 :(得分:3)

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

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

以便接收者可以找出消息的结束位置。否则,接收将继续等待消息。

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