HTTP Server实现Keep-Alive是如何保持TCP连接的?

tcp连接会超时自动关闭吗?http server需不需要去保持tcp连接?还是说不关闭就会一直连着。


总结:不需要去保持tcp连接。

我的疑惑来自于对tcp keepalive的误解。
keepalive是工作不正常时回收资源用的。在一定时间后发送探测报文,如果客户端挂了就关闭连接,相对于“keep”更像是“check”。

同时,tcp连接的关闭也是由HTTP Server控制,执行了socket.close()才会关闭tcp连接。OS不会去关闭正常工作的连接,所以keepalive对HTTP Keep-Alive没有影响。

很多教程会提到tcp“长连接”“短连接”,个人觉得“长连接”“短连接”放在HTTP讲就好,keepalive不如理解成故障自动回收连接。

阅读 3.5k
2 个回答

客户端不调用 close ,同时服务端不调用 close 就是长连接。

既然你要问 http server ,那就是服务端的代码不要调用 close 就好了,就是这么简单,一点花头都没有

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题