所以我认为在HTTP 1.1中你的TCP连接会持续很长时间你在与该服务器进行通信吗?它是如何工作的,TCP连接如何在写入套接字时知道?任何形成都会很棒,我已经做过研究,但我找不到我想要阅读RFC的内容。
答案 0 :(得分:0)
见section 8.1 of RFC 2616。基本上,HTTP 1.1将所有连接视为持久性,但RFC的语言不会强制执行此行为,因为它使用“应该”一词。如果它是强制性的,它将使用“必须”。
但是,RFC没有详细说明实现如何执行此操作。从HTTP Persistent Connection page on Wikipedia可以看出,Apache的默认超时(超过该默认超时,它返回其他用途的持久连接)可能低至五秒。 (虽然这几乎可以肯定是可配置的,考虑到Apache提供的所有其他旋钮和拨号)。
换句话说,它意味着在很短的时间内向同一地址发出大量请求,以免浪费时间打开和关闭一个桶的会话负载。增加此超时不是“免费搭车”,因为资源在连接保持打开时被捆绑。在您期望大量传入客户端的环境中,占用这些资源对性能而言可能是致命的。
答案 1 :(得分:0)
典型的实现是HTTP服务器将具有超时(通常称为KeepAliveTimeout或such),之后它将关闭空闲连接。
每个连接保留一个线程或整个进程的服务器(例如通常使用mpm_prefork或mpm_worker的apache),keepalive通常被完全禁用或保持很短(几秒钟)。对于基于事件的服务器(如nginx),每个连接使用的内存要少得多,keepalive超时可以保留更高的值(通常是一分钟左右)。