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

标签 c# entity-framework http rest odata

我将 Entity Framework 4.0 与 REST 网络服务结合使用。 在客户端,在数据/实体加载期间,客户端发出 40 个顺序 Web 请求。

当我将 HttpWebRequest.KeepAlive 设置为 false(Fiddler 在客户端-服务器通信中显示 Connection: Close header )时,数据加载更快大约 50%(请求仍然是顺序的)- 我想知道为什么。

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

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

怎么了?如何加快持续请求?

最佳答案

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

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

关于c# - 非持久性 HTTP 1.1 连接比持久性连接更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8636841/

相关文章:

c# - 实现死锁异常的重试逻辑

c# - 使用 'EntityFramework 6.2.0' 而不是项目目标框架 '.NETFramework,Version=v4.6.1' 恢复包 '.NETCoreApp,Version=v2.0'

java - JSP - 在同一表单/同一页面中获取添加结果

api - 设计 RESTful URI

c# - 是否可以创建具有数千个长时间运行的 TCP 连接的可伸缩 WCF 服务?

c# - 从 ThreadID 获取 ThreadName

c# - C# 中的二维数据结构

c# - C# 基于换行读取文件

c# - 存储库/UoW - 使用还是不使用?

http - 使用 FileServer 从 RiceBox 提供 favicon.icon