У меня была такая же проблема с SocketChannel.Я использовал библиотеку на основе SocketChannel для подключения к веб-сокету из приложения andoird (библиотека Autobahn websocket ).Я могу успешно подключиться к веб-сокету и отправлять / получать сообщения через веб-сокет.Но через некоторое время (может быть через 30 минут, 1 или 2 часа) соединение с веб-сокетом зависает.В соответствии с вашим сценарием, журналы кажутся сокетным соединением все еще открытым и соединяются с сервером, сообщение уже успешно записано.Но сервер не будет получать сообщения.
В моем случае проблема не с SocketChannel.Проблема с тайм-аутом TCP.Чтобы сохранить соединение живым, я отправляю сообщение о пероидальном пинге с сервера на клиент.Веб-сокет по умолчанию поддерживает эти сообщения, вызывая сообщения PING / PONG .Это сообщение ping необходимо периодически отправлять клиентам, чтобы поддерживать соединение.При получении сообщения ping клиент автоматически отвечает на сообщение PONG .Благодаря такому подходу я смог долго поддерживать сокетное соединение.
Подробнее об этом подходе Решение для зависания веб-сокета , Веб-сокеты.Потеря интернета, сообщений поддержки активности, архитектуры приложений и т. Д. , протокол веб-сокета и сообщения пинг / понг
Надеюсь, это поможет вам (даже если вы не используете веб-сокет),Подход может быть таким же в веб-сокете, как и в вашем приложении чата.