Ich verwende Apache Tomcat 8.0.33.
Ich ging durch Java-Dokumentation über RemoteEndpoint.Basic , die besagt, dass sendText (String Text) blockiert, bis die gesamte Nachricht übertragen wurde.
Aber ich bemerkte, dass, wenn die Client Internet verliert die Verbindung und sendtext() -Methode auf der Server-Seite aufgerufen wird, ist es nicht eine IOException sofort und gibt die Methode normalerweise geworfen.
IOException wird später ausgelöst und die onError() -Methode wird aufgerufen.
Ist dies ein normales Verhalten? Sollte die sendText() -Methode nicht blockieren bis die gesamte Nachricht erfolgreich übertragen wurde oder sofort eine IOException werfen, wenn es ein Problem gibt?Die Websocket-Implementierung von Tomcat 8.0.33 löst keine IOException sofort aus, wenn die sendText() -Methode aufgerufen wird (serverseitig)
0
A
Antwort
1
Ja, dieses Verhalten ist normal.
Je nachdem, wie der Client die Verbindung trennt, kann der Server dies nicht wissen und die Nachricht wird im Netzwerkpuffer gespeichert, bis der Netzwerkstack herausfindet, dass der Client verschwunden ist.
Ich bemerkte, dass IOException ausgelöst wird und onError() viel später aufgerufen wird. Gibt es irgendeine Möglichkeit, herauszufinden, welche sendText() die Ausnahme verursacht hat, da der Code Tausende von sendText() Aufrufen enthalten könnte? – Tejas
Nein. Wenn Sie eine Bestätigungsnachricht benötigen, müssen Sie diese selbst implementieren. –