Ich hatte ein ähnliches Problem mit SocketChannel. Ich habe SocketChannel basierte Bibliothek verwendet, um eine Verbindung zu einem Websocket von andird Anwendung herzustellen (Die Bibliothek ist Autobahn websocket). Ich kann erfolgreich Verbindung zum Web-Socket herstellen und kann Nachrichten über den Websocket senden/empfangen. Aber nach einiger Zeit (vielleicht nach 30 Minuten, 1 oder 2 Stunden) hängt die Websocket-Verbindung. Wie Ihr Szenario, Protokolle scheint Socket-Verbindung ist noch offen und Verbindung zum Server, Nachricht bereits erfolgreich schreiben. Aber der Server empfängt die Nachrichten nicht.
In meinem Szenario ist Problem nicht mit dem SocketChannel. Problem ist mit TCP-Timeout. Um die Verbindung aufrecht zu erhalten, sende ich eine peroidische Ping-Nachricht vom Server zum Client. Web-Socket-Standard unterstützt diese Nachrichten Anruf PING/PONG Nachrichten. Diese Ping-Nachricht muss in regelmäßigen Abständen an Clients gesendet werden, um die Verbindung aufrecht zu erhalten. Wenn Ping-Nachricht empfängt Client antwortet automatisch PONG Nachricht an den Server. Mit diesem Ansatz konnte ich die Socket-Verbindung lange halten.
Weitere Informationen zu diesem Ansatz Solution for websocket hanging, Websockets. Loss of internet, keep-alive messages, app architecture etc, websocket protocol and ping/pong messages
Hoffnung Sie dies helfen würde (auch wenn Sie nicht websocket verwenden). Der Ansatz könnte sowohl in Websocket als auch in Ihrer Chat-Anwendung gleich sein.
Ich habe das gleiche Problem und ich habe keine Lösung gefunden. Ich suche jetzt seit 6 Monaten. – Joel