一般的Web服务器问题

我从来没有想过,但现在我对幕后几个基本的东西感兴趣。 1)每次请求后,Web服务器是否closures连接? 2)当我有更多的浏览器窗口打开,并从一些networking服务器的所有请求数据,networking服务器是否使用某种标准的套接字通信,以识别哪个连接请求什么? 3)如果用户数多于自由端口(例如同时请求66k)

谢谢 :)

  1. 取决于请求使用的HTTP版本。 当服务器完成将响应发送回用户代理时,HTTP 1.0连接将立即closures。 HTTP1.1增加了对Keepalive的支持,它使得套接字连接在响应返回给用户代理之后保持打开状态。 在这种情况下,由用户代理发送的连接:保持活动的HTTP标头表明它希望保持开放连接,这意味着它将通过发送更多的请求。
  2. 是。 这是基本的套接字function。 客户端在(通常很高的)未使用的本地端口上打开一个套接字,并尝试在远程主机上打开一个具有特定目标端口(例如:HTTP的80)的连接。 客户端创build的每个其他连接都会在另一个端口上打开一个本地套接字,但仍可能尝试在远程主机上的同一个端口上尝试连接。
  3. 服务器上的侦听器进程将派生工作进程来处理多个传入的请求,使侦听器免费处理传入的请求。 大多数http服务器将有一个configuration选项来pipe理同时处理的请求的数量。

1)通常每个页面请求被限制在一个连接打开和closures。

2)您的计算机更改其所做的每个请求的源端口。 服务器使用IP /源端口组合来跟踪哪些请求来自哪些主机

3)服务器正在应答端口80上的所有HTTP请求。但是对于客户端来说,如果您可以在同一时间从一个客户端产生66K请求,那么您可能会遇到问题,我不确定这一点。

1)大多数现代的networking服务器都支持Keepalive,所以如果浏览器支持它,networking服务器将会为每个连接提供多个请求。

http://en.wikipedia.org/wiki/HTTP_persistent_connection

2)是的,每个连接都得到它自己的套接字,这是一个IP:PORT对。

http://en.wikipedia.org/wiki/TCP_sockets

3)如果你有65535人同时从一台服务器请求,你需要退后一步,考虑你在做什么! :)说真的,除非你非常幸运,否则在遇到这个问题之前,你会感觉到需要进行负载平衡。 一个问题,你可以尽早用尽文件描述符。 bash中的缺省值是1024(请参阅bash联机帮助页中的“ulimit”)。

http://en.wikipedia.org/wiki/File_descriptors