0

所以我认为使用 HTTP 1.1,只要您与该服务器通信,您的 TCP 连接就会持续存在?它实际上是如何工作的,TCP 连接如何知道您何时完成写入套接字?任何形式都会很棒,我已经做过研究,但我找不到我要阅读的 RFC。

4

2 回答 2

0

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

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

于 2012-10-09T08:19:30.757 回答
0

请参阅RFC 2616 的第 8.1 节。基本上,HTTP 1.1 将所有连接视为持久连接,但 RFC 的语言并没有强制要求这种行为,因为它使用了“应该”这个词。如果是强制的,它将使用“MUST”。

但是,RFC 没有详细说明实现如何做到这一点。从Wikipedia 上的 HTTP Persistent Connection 页面可以看出,Apache 的默认超时时间(超过此时间,它会返回持久连接以供其他用途)可能低至 5 秒。(尽管考虑到 Apache 提供的所有其他旋钮和刻度盘,这几乎可以肯定是可配置的)。

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

于 2012-10-09T08:15:24.427 回答