【发布时间】: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