2017-06-19 2 views
-4

Ich brauche einen Zähler im Server, der die Anzahl der HTTP-Anfragen enthält. Da jeder Server mehrere Anfragen asynchron (dh derselbe Controller wird von jedem Benutzer aufgerufen) zu einem bestimmten Zeitpunkt verarbeiten kann, wo kann ich Platzieren Sie den Zähler so, dass er zwischen jeder Anfrage geteilt werden kann.Wie funktionieren die Controller in asp.net mvc?

+1

Warum versuchst du es nicht und findest es heraus? Lernen bedeutet etwas zu tun. Stellen Sie keine Frage, bis Sie feststecken. – mason

+0

Yes.Wenn Sie Daten zwischen mehreren Anfragen teilen möchten, sollten Sie eine Art von persistenten Mechanismus wie Sitzung oder ein Datenbankspeicher oder statisch/Singleton etc. – Shyju

+0

Sie haben vier Fragen in einem. Lies [ask] und versuche zuerst zu suchen und stelle eine Frage pro Frage. – CodeCaster

Antwort

1

Ja, der Controller wird bei jeder Anfrage instanziiert und entsorgt. Ja, jede Anfrage erhält ihren eigenen Thread, obwohl dieser Thread ausgetauscht werden kann (im Falle von asynchronen Arbeiten) oder mehrere Anfragen über die gesamte Lebenszeit abwickeln kann.

Parallelität ist ein komplexes Thema und basiert auf zahlreichen verschiedenen Faktoren zu jeder Zeit. Vereinfacht gesagt, ja, Threads werden parallel ausgeführt. Sie teilen jedoch keine Ressourcen untereinander (zum größten Teil). Letztendlich gibt es einige Ressourcen-Sharing über den Eltern-Prozess, aber für die praktische Anwendung sollten Sie sie als idempotent betrachten.

Basiert auf all dies und Ihre letzte Frage, wenn Sie versuchen, einen Zähler in Ihrem Code zu implementieren, nicht. Es wird nicht funktionieren und wird es nie tun. Selbst wenn Sie eine Art prozessgebundenen thread-sicheren Zähler etwas koordinieren können, funktioniert es nicht mit Arbeitern und es wird jedes Mal getötet, wenn der App-Pool recycelt, abstürzt oder aus irgendeinem Grund neu startet.

Ein Zähler sollte in einer Datenbank oder einem anderen persistenten Datenspeicher implementiert werden. Punkt. Selbst dann müssen Sie äußerst vorsichtig mit der Nebenläufigkeit umgehen, und wenn Sie nicht viel Zeit darauf verwenden, Bots auszuschließen, die Seitenladevorgänge von denselben Benutzern wiederholen usw., wird Ihre Zählung unabhängig von der Art der Zählung ausfallen.