【问题标题】:HttpWebRequest stalls when there are multiple keep-alive requests当有多个保持活动请求时,HttpWebRequest 停止
【发布时间】:2010-06-24 20:32:35
【问题描述】:

我正在尝试为我编写的 Web 服务服务器编写负载测试客户端。客户端使用 HTTP 与服务器交互。

我的服务的常规客户端应该使用 HTTP 保持活动状态(通过使用 HTTP 1.1 并且不在 HttpWebRequest 中将 KeepAlive 值设置为 false),以便它们的 TCP 连接保持在以后的 HTTP 请求中。每个客户端在开始时执行同步请求/响应以进行身份​​验证,然后继续进行异步请求。

在我的负载测试中,我想让数百个模拟客户端都向同一台服务器发送请求。但是,如果我没有在我的 HttpWebRequests 中将 KeepAlive 设置为 false,那么所有模拟客户端显然都尝试使用相同的 TCP 连接,并且我在负载测试中遇到停顿,因为它们慢慢地尝试共享连接以进行初始同步要求。我不相信使第一个请求异步可以解决这个问题,我之前尝试过并且在 BeginGetResponse() 调用中得到了相同的停顿(应该立即返回但不会),因为它正在等待进入我认为的共享连接。

有什么方法可以确保我的负载测试中的每个“客户端”都有自己的 TCP 连接,它们可以重复用于未来的 HttpWebRequests?

这里有人有类似的问题: HttpWebRequest timeout in 3.5sp1 他们使用 KeepAlive = false 解决了这个问题,但这对我来说还不够好,因为这台服务器的容量很大,我希望将网络数据传输保持在最低限度。

【问题讨论】:

    标签: c# httpwebrequest


    【解决方案1】:

    连接限制可能因底层操作系统/主机环境而异。可以通过将 HttpWebRequest.ServicePoint.ConnectionLimit 设置为更高的值或在 .NET 的 .config 文件之一中以编程方式更改它

    【讨论】:

    • 建议客户端应用一次不要使用超过 2 个持久连接 (faqs.org/rfcs/rfc2616.html)
    • 连接限制无关紧要,我没有达到它。问题是同一个 TCP 连接被一遍又一遍地重复使用,而我对特定 HTTP 请求正在使用哪个 TCP 连接没有足够的控制。我怀疑这是不可能的,我将尝试使用单独的进程。
    • 尝试用 .net 1.1 编译这是 2.0 的问题
    猜你喜欢
    • 2016-04-01
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多