У меня есть сервлет Tomcat 7, принимающий соединения с удаленными клиентами и поддерживающие эти соединения в течение нескольких часов или дней, если это возможно. Итак, мы используем разъем NIO. Полоса пропускания по физическим соединениям может быть дорогостоящей, поэтому трафик должен быть сведен к абсолютному минимуму, поэтому мы запрограммировали удаленные клиенты для проверки соединения с очень редким пингом.Серпуху Tomcat 7 необходимо принудительно закрыть длительное соединение NIO
Иногда сервлету сообщается, что соединение закрыто, но кажется, что удаленным клиентам не сообщается. Клиенты не узнают, пока не сделают пинг, и в это время они могут установить новое соединение. Нам нужно сократить время, в течение которого клиенты не подключены, не используя больше пингов.
Один из способов, который работает, - закрыть сервер Tomcat. Клиенты знают, что они немедленно отключены. Очевидно, мы не хотим закрывать Tomcat - моя точка зрения - должен быть какой-то сигнал, который делает это через нормально-тихое соединение.
Как заставить Tomcat отправить этот сигнал? Пожалуйста, не отвечайте, что я не могу, если вы не можете сказать мне, почему, со спецификой, отчасти потому, что я не могу в это поверить, и в основном потому, что я не хочу в это верить. Кажется странным - как будто вы не можете повесить трубку на кого-то.
Альтернативный вопрос # 1 - может ли сервлет восстановить соединение, которое было сказано, закрыто?
Альтернативный вопрос №2 - может ли кто-нибудь подумать о чем-нибудь еще, что может помочь?
Stu - спасибо за вашу помощь. Я удивлен, что клиенты тоже не знают. Похоже, что Tomcat не передает информацию, о которой знает сервлет. Я не уверен, что происходит на стороне клиента. У Tomcat и клиентов есть авторитетный поставщик услуг сотовой связи, и я не знаю, что он делает. – DaveWalley
(я снова) Кроме того, я бы сделал больше диагностических данных по TCP/IP, если бы знал, как - сети не мой сильный костюм. Мы использовали WireShark, но я не знаю, на что я смотрю. Я думал, что мне нужно использовать NIO для push-сервера - можете ли вы указать мне на какой-либо примерный код или учебники, которые помогут мне ускорить? – DaveWalley
@Dave: Это по всей мобильной сети? Я бы предложил другой подход, например UDP или какой-то длительный длительный опрос. Помните, что Tomcat, в конце концов, является HTTP-сервером. Протокол HTTP-протокола без атак, запрос/ответ. Это не похоже на то, что вы пытаетесь сделать HTTP-пакеты очень хорошо. * «Правильный инструмент для правильной работы». * Что касается сетевых диагностических инструментов, начните с более простых утилит, таких как netstat. Wireshare - действительно тяжелый материал. –