【发布时间】:2017-06-23 07:35:37
【问题描述】:
我正在尝试模拟许多并发用户 (>2000) 来测试 Web 服务。每个用户在特定的预定义时间执行操作,例如:
- 用户A:09:10:02、09:10:03、09:10:08
- 用户 B:09:10:03、09:10:05、09:10:07
- 用户 C:09:10:03、09:10:09、09:10:15、09:10:20
我现在想在每个时间实时发送网络请求。我最多可以容忍约 2 秒的延迟。我已经在尝试但没有成功:
a) 将所有时间聚合到一个列表中,按时间排序,然后对其进行迭代:
foreach (DateTime sendTime in times) {
while (DateTime.now < sendTime)
Thread.Sleep(1);
SendRequest();
}
b) 为每个用户创建一个线程,每个线程检查与上述相同的条件,但睡眠时间更长
这两种方法都可以工作,但是请求应该发送的时间和实际发送的时间之间的延迟太高了。有什么方法可以更高精度地发送请求吗?
编辑:建议的方法非常有效。但是,对于许多请求,延迟仍然非常高。显然,原因是我的 SendRequest() 方法:
private static async Task SendRequest()
{
// Log time difference
string url = "http://www.request.url/newaction";
WebRequest webRequest = WebRequest.Create(url);
try
{
WebResponse webResponse = await webRequest.GetResponseAsync();
}
catch (Exception e) { }
}
请注意,我的 Web 服务没有返回任何响应,这可能是速度变慢的原因?我可以在不等待响应的情况下发送请求吗?
【问题讨论】:
-
还有你的问题?
-
我添加了一个更具体的问题
标签: c# .net multithreading webrequest