我正在使用Netty编写HTTP服务器。我在创建服务器引导程序时设置了keep-alive选项。
bootstrap.setOption("child.keepAlive", true);
每次写入HTTP响应时,我都会设置keep-alive标头并在写入响应后关闭通道。
rep.setHeader("Connection", "keep-alive");
channel.write(rep).addListener(ChannelFutureListener.CLOSE);
我不确定我是否应该关闭频道。
答案 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);”如果你想让你的连接保持打开状态。