Ich habe gerade angefangen, mit Server-Events herumzuspielen, und ich stoße auf eine Chrome-Fehlermeldung, die ich gerne verstehen würde. Ich habe das Web sehr schnell durchsucht, aber keine Erklärung gefunden, also kann ich etwas sehr falsch machen.
Auf der Serverseite habe ich ein einfaches Servlet, das Anfragen annimmt und eine Dummy-Ersteller-Aufgabe erstellt:
%Vor%auf dem Client ich einfach:
%Vor%Wenn ich die HTML-Datei lade, funktioniert es gut, Ereignisse werden empfangen und auf die Konsole geschrieben. Aber nach 30 Sekunden bekomme ich eine Fehlermeldung:
GET [HttpOfLocalhost] / Ereignisse net :: ERR_INCOMPLETE_CHUNKED_ENCODING
warum?
Die Anforderung wird dann abgebrochen und sofort wird eine neue gestartet, damit die Anwendung nicht beendet wird, aber die Fehlermeldungen auf der Konsole nicht gut sind.
Screenshot meiner Entwicklerkonsole:
Details zu Anfrage / Responses:
Timing, dies zeigt, dass es immer nach 30 Sekunden auftritt:
Danke!
Ok, also konnte ich nicht still stehen und näher schauen, was passiert.
Das AsyncContext -Objekt hat ein setTimeout (...) Methode. Standardmäßig ist in meiner Tomcat-Version (Tomcat Embedded 8) der Wert auf 30.000 ms (30 Sekunden) eingestellt. Das ist genau die Dauer, nachdem ich den net :: ERR_INCOMPLETE_CHUNKED_ENCODING Fehler in meiner Chrome-Konsole erhalten habe.
Ich überprüfte mit:
%Vor%was gezeigt hat:
%Vor%Um die net: ERR Nachricht zu vermeiden, könnte jemand das Timeout auf 0 setzen. Aber dann läuft der Event Thread für immer (leider). Eine andere Lösung, die ich verwendet habe, besteht darin, ein AsyncListener zu AsyncContext und rufen Sie die complete () Methode innerhalb der onTimeout () Methode.
aus dem API-Dokument der complete () -Methode:
Schließt den asynchronen Vorgang ab, der für die Anforderung gestartet wurde Das wurde verwendet, um diesen AsyncContext zu initialisieren und die Antwort zu schließen das wurde verwendet, um diesen AsyncContext zu initialisieren. Alle Zuhörer vom Typ AsyncListener, für die der ServletRequest registriert wurde Dieser AsyncContext wurde erstellt und wird bei onComplete aufgerufen Methode.
der Quellcode meines Zuhörers:
%Vor%Also ja, es lag an mangelndem Wissen. Ich hoffe, das ist hilfreich für jemanden.
Sie können kleine "no operation" (noop) Chunks senden, um die Verbindung etwa alle 10 Sekunden aktiv zu halten.
Tags und Links java google-chrome servlet-3.0 server-sent-events