Я нашел старую ветку tomcat от 2009 года, в которой говорится, что мы можем добиться этого, сбрасывая пустые байты (
Код: Выделить всё
new byte[0]Я думаю, что я потребуется что-то на уровне TCP, например PING или поддержка активности, но я не смог найти ресурсы о том, как это сделать для моего варианта использования. Интеграция Spring с TCP выглядит так, будто она устанавливает новые соединения с настроенным сервером вместо использования сокета входящих запросов. Конфигурации поддержания активности Tomcat, похоже, предназначены для тайм-аута запросов, а не для проверки того, отключился ли пользователь (я не хочу прерывать какое-либо соединение с моим сервером).
В идеале, Я хотел бы периодически проверять подключение, чтобы иметь возможность быстрее разблокировать и освободить ресурсы или остановить тяжелую задачу, если клиент отключится после запуска задачи. Но если это слишком сложно, то можно просто проверить подключение один раз прямо перед тем, как приступить к тяжелой задаче.
Редактировать:
@talex отметил в комментарии, что невозможно добиться предложенного мною типа TCP Heartbeat без изменения протокола. Итак, теперь я думаю о менее надежной проверке, при которой мы проверяем, получили ли мы пакет FIN от клиента, а не обрабатываем случаи, когда клиент внезапно отключается. Можно ли это реализовать в весенней архитектуре? Я нашел связанный вопрос SO, но их решение заключается в обнаружении EOF, что всегда верно в моем случае, потому что Spring проанализировал бы поток для меня к тому времени, когда я доберусь до своего контроллера.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -applicati
Мобильная версия