与HTTP的TCP持久连接?

时间:2012-10-09 08:02:19

标签: http tcp

所以我认为在HTTP 1.1中你的TCP连接会持续很长时间你在与该服务器进行通信吗?它是如何工作的,TCP连接如何在写入套接字时知道?任何形成都会很棒,我已经做过研究,但我找不到我想要阅读RFC的内容。

2 个答案:

答案 0 :(得分:0)

section 8.1 of RFC 2616。基本上,HTTP 1.1将所有连接视为持久性,但RFC的语言不会强制执行此行为,因为它使用“应该”一词。如果它是强制性的,它将使用“必须”。

但是,RFC没有详细说明实现如何执行此操作。从HTTP Persistent Connection page on Wikipedia可以看出,Apache的默认超时(超过该默认超时,它返回其他用途的持久连接)可能低至五秒。 (虽然这几乎可以肯定是可配置的,考虑到Apache提供的所有其他旋钮和拨号)。

换句话说,它意味着在很短的时间内向同一地址发出大量请求,以免浪费时间打开和关闭一个桶的会话负载。增加此超时不是“免费搭车”,因为资源在连接保持打开时被捆绑。在您期望大量传入客户端的环境中,占用这些资源对性能而言可能是致命的。

答案 1 :(得分:0)

典型的实现是HTTP服务器将具有超时(通常称为KeepAliveTimeoutsuch),之后它将关闭空闲连接。

每个连接保留一个线程或整个进程的服务器(例如通常使用mpm_prefork或mpm_worker的apache),keepalive通常被完全禁用或保持很短(几秒钟)。对于基于事件的服务器(如nginx),每个连接使用的内存要少得多,keepalive超时可以保留更高的值(通常是一分钟左右)。