Wie verhindert man net :: ERR_INCOMPLETE_CHUNKED_ENCODING bei der Verwendung von HTML5 Server Events und Java Servlets?

8

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!

    
Chris 11.11.2014, 11:37
quelle

2 Antworten

4

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.

    
Chris 11.11.2014, 14:00
quelle
2

Sie können kleine "no operation" (noop) Chunks senden, um die Verbindung etwa alle 10 Sekunden aktiv zu halten.

    
user951335 20.07.2015 20:22
quelle