Was ist der richtige Weg um kontinuierliche Ajax Calls zu machen?

8

Ich habe einen Code wie diesen, um ein Diagramm auf meiner Seite in Echtzeit alle 30 Sekunden zu aktualisieren:

%Vor%

Das scheint gut zu funktionieren, außer nach 16-20 Stunden ununterbrochener Ajax-Anrufe bekomme ich einen Fehler vom Server zurück:

  

Zeitlimit abgelaufen Die Timeout-Zeit ist abgelaufen, bevor a   Verbindung vom Pool. Dies kann geschehen, weil alle gepoolt wurden   Verbindungen wurden verwendet und die maximale Poolgröße wurde erreicht.

Ich habe die Debug-Konsole hochgefahren und das ist was ich beobachte:

AJAX-Aufrufe werden korrekt ausgelöst

Vor der 16-20-Stunden-Periode gibt es einige Fälle, in denen die Latenz ansteigt (hier wird der Timeout -Fehler zum ersten Mal gesehen)

Schließlich schafft der Code einen Engpass. Die Latenz steigt für jeden einzelnen Anruf und das Frontend bricht ab. Kein Anruf nach dem blauen Pfeil unten gibt irgendwelche Daten zurück. Stattdessen wird der Timeout-Fehler ausgelöst.

Ich bin mir sicher, dass ich etwas fundamental falsch mache. Irgendwelche Ideen zur Lösung dieses Problems?

EDIT: Serverseitiger Code

Meine Verbindungszeichenfolge:

%Vor%

Der Code zum Abrufen der Datensätze:

%Vor%

Wenn ich etwas nicht vermisse, schließe ich die Verbindung, nachdem ich die Datensätze mit con.Close() erstellt habe, oder muss ich noch etwas anderes tun?

EDIT 2: Ändern Sie den obigen Code wie folgt. Ist das korrekt?

%Vor%     
Legend 08.10.2012, 16:39
quelle

2 Antworten

4

Es sieht aus wie ein serverseitiges Problem mit zu vielen Verbindungen zu einer Datenbank. Wie verbinden Sie sich mit der DB? Schließen Sie die Verbindung nach der Verwendung? Versuchen Sie, die Verbindung nach einer Reihe von Verbindungen zu schließen.

    
Juan Pablo Santos 08.10.2012, 16:47
quelle
1

"Ich bekomme einen Fehler vom Server zurück" lässt mich glauben, dass dies ein serverseitiges Ressourcenleck ist. Was passiert, wenn Sie zwei Browser-Registerkarten parallel oder zwei Browser parallel ausführen oder zwei Hosts mit eigenen Browsern den Server parallel anstoßen?

Bleibt Ihr Browser memoriert im Laufe der Zeit?

Wenn Sie Zugang zu serverseitigen Logs haben, wäre das auch ein Punkt zum Eintauchen.

BEARBEITEN

Nachdem Sie den Servercode gesehen haben, möchten Sie möglicherweise auch den Reader für die Sicherheit schließen. Ich wäre überrascht, wenn das ein Leck verursachen würde, aber Sie wissen nie. Ich bin vertrauter mit Java, wo dies je nach verwendetem Treiber zu einem Leck führen kann.

%Vor%     
Cory Kendall 08.10.2012 16:57
quelle

Tags und Links