非持久性HTTP 1.1连接比持久性更快?

时间:2011-12-26 15:00:50

标签: c# entity-framework http rest odata

我正在将Entity framework 4.0与REST Web服务结合使用。 在客户端,在数据/实体加载期间,客户端正在发出40个连续的Web请求。

当我将HttpWebRequest.KeepAlive设置为false(Fiddler在客户端 - 服务器通信中显示连接:关闭标头)时,数据加载更快约50%(请求仍然是连续的) - 我想知道为什么。

来自维基百科: HTTP持久连接,也称为HTTP保持活动或HTTP连接重用,是使用相同的TCP连接发送和接收多个HTTP请求/响应的想法,而不是为每个请求打开一个新连接/响应对。

来自MSDN: 当KeepAlive属性为true时,应用程序会与支持它们的服务器建立持久连接。 使用HTTP / 1.1时,默认情况下Keep-Alive为/ true。

出了什么问题?如何加快持久请求?

1 个答案:

答案 0 :(得分:1)

也许在客户端上没有限制。非持久性连接的每个IP的并发连接数高于持久性连接数。因此,当使用keep-alive时,客户端可能允许您并行使用10个conn,但是当不使用keep-alive时,您可以拥有15个并行连接。

但是只有在建立连接非常快的本地网络上才会更快。在互联网上(RTT为5-200毫秒),您只需要3倍RTT时间(SYN,SYN + ACK,ACK)即可开始新连接。因此,特别是如果您有许多小请求(例如1kB以下的图像),保持活动的速度可以快4倍 - 因为您只设置一次连接然后根据请求发送1个数据包并接收1个数据包作为响应。但是没有keepalive,你需要3个数据包开始,然后发送请求,然后接收响应,然后2个数据包关闭连接。

相关问题