У нас есть GPRS-шлюз на базе Apache Mina (сервер).Иногда, обычно, когда соединение жестоко прерывается со стороны клиента, т. Е. Когда кабель питания отключен или происходит какое-либо другое необычное отключение или какая-либо проблема с сетью, он не удаляется и не закрывается на стороне сервера.Он остается там, в бездействующем состоянии, потому что я не знаю, как долго (может быть, навсегда).Временами мы сталкиваемся с проблемами при выключении сервера, MINA отнимает слишком много времени, а иногда нам приходится со временем его убивать.Мы подозреваем, что эта проблема связана с проблемой отсутствия связи.
На самом деле, эта мертвая связь имеет смысл.Так как соединение жестоко закрыто, и у mina нет способа проверить это (так работает сеанс tcp).Мы, как обходной путь, разработали решение, которое закроет сессию, если она будет бездействовать (и читать, и писать), скажем, 30 минут (или любое настраиваемое время).Что нам не нравится по двум причинам:
1- Это не выглядит красиво.
2 - Плюс у нас есть правило, что клиент устанавливает постоянное соединение с сервером.Таким образом, немного трудно установить «тайм-аут простоя», так как мы не можем просто закрыть любой сеанс, который простаивал в течение х мин / ч, поскольку это может быть допустимое соединение.
Итак, есть ли более хороший и более безопасный (в нашем случае) способ обнаружить и очистить эти мертвые соединения в MINA?