Ich versuche viele gleichzeitige Benutzer (> 2000) zu simulieren, um einen Web Service zu testen. Jeder Benutzer führt Aktionen an einer bestimmten vordefinierten Zeit, zum Beispiel:Viele parallele WebRequests senden
- Benutzer A: 09.10.02, 09.10.03, 09:10:08
- Benutzer B: 9.10 : 03, 09.10.05, 09:10:07
- Benutzer C: 09.10.03, 09.10.09, 09.10.15, 09:10:20
I Jetzt möchten Sie Web-Anfrage in Echtzeit zu jeder dieser Zeiten senden. Ich kann eine Verzögerung von höchstens ~ 2 Sekunden tolerieren. Was ich bereits ohne Erfolg versucht:
a) Aggregate alle mal in einer einzigen Liste, sortiert nach Zeit es dann iterieren:
foreach (DateTime sendTime in times) {
while (DateTime.now < sendTime)
Thread.Sleep(1);
SendRequest();
}
b) für jeden Benutzer einen Thread erstellen, mit jedem Thread Prüfung für die gleiche Bedingung wie oben aber eine längere Schlafzeit
Beide Ansätze funktionieren, aber die Verzögerung zwischen der Zeit, die die Anfrage gesendet werden sollte und der Zeit, die es tatsächlich gesendet wurde, ist viel zu hoch. Gibt es eine Möglichkeit, die Anfragen mit höherer Präzision zu senden?
Edit: Die vorgeschlagenen Ansätze arbeiten wirklich gut. Die Verzögerung ist jedoch immer noch extrem hoch für viele Anfragen. Apparantly, der Grund dafür ist, meine Sendrequest() Methode:
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) { }
}
Beachten Sie, dass meine Web-Service keine Antwort zurückgibt, vielleicht ist dies der Grund für die Verlangsamung? Kann ich die Anfrage senden, ohne auf die Antwort zu warten?
und Ihre Frage? –
Ich habe eine genauere Frage hinzugefügt – aseipel