Kut*_*ach 9 http keep-alive server-sent-events http-pipelining
我试图了解什么是HTTP流水线和HTTP保持活动连接,并尝试在这两个主题和Server Sent事件技术之间建立连接.
据我所知,当建立的一次TCP连接用于逐个发送多个HTTP请求时, HTTP保持连接是HTTP 1.1使用TCP的默认方式. HTTP流水线操作是客户端向服务器发送请求的功能,而使用相同的TCP连接尚未收到对先前请求的响应,通常不会在浏览器中用作默认方式.
我的问题:
1)如果可以使用一个TCP连接一个接一个地向服务器发送多个请求 - 客户端如何区分响应?我猜客户端正在使用FIFO顺序发送服务器的响应?
2)为什么非幂等请求(如POST请求)不应该被流水线化(根据维基百科)?
3)Web服务器的局限性是什么:可能的开放TCP连接数量是多少?如果是,那么如果某些客户端持有保持活动连接,则其他客户端无法建立连接,这可能会导致问题,对吧?
4)Server Sent Events正在使用keep-alive连接,但据我所知,SSE没有使用流水线技术.相反,他们设法处理对一个请求的多个响应,或者他们只是在下一个事件响应到达时发送另一个请求.哪种猜测是正确的?
5)一个TCP连接意味着一个插座?一个套接字意味着一个TCP连接?关闭/打开套接字意味着关闭/打开TCP连接?
是的,FIFO。TCP / IP保证按顺序传送数据,因此响应不能以不同的顺序到达(如果服务器/代理有错误,并且以错误的顺序发送响应,那么您就完全被搞砸了)。
我不记得任何HTTP规范的原因。可能只是警告,因为在某些代理/服务器中流水线实施不佳。
HTTP规范建议每个服务器2个连接,浏览器确定每个服务器6-8个连接,但没有固定限制。连接耗尽对于Apache来说是一个真正的问题,对于高负载情况,建议在Apache中禁用KeepAlive并使用可以廉价地向客户端提供Keep-Alive功能的代理(例如HAProxy)。
代理的好处在于,一个代理可以将连接分发到多个服务器(帮助扩展),或者可以修改流量(例如,即使没有服务器端软件,gzip也可以压缩所有内容)。
SSE不依赖于保持活动。它没有使用多个响应。这是一个永久需要“下载”的响应,因此管道传输或保持活动与SSE无关。发送SSE响应时,TCP / IP连接不能再返回任何响应。
只要连接处于打开状态,SSE就会使服务器保持忙碌状态(因此,通常每个用户始终如此)。这就是为什么最好将SSE与可以处理数十万个连接的Node.js / Tornado一起使用,而不是将PHP / Apache一次设计用于很少的连接。
套接字是TCP / IP连接的编程接口。通常是的,一个插座就是一种连接。
| 归档时间: |
|
| 查看次数: |
3199 次 |
| 最近记录: |