Как приложение Java может быть проинформировано о получении [FIN,ACK] по TCP-соединению?
У меня установлено 2 соединения от экземпляра JMeter до сервера Apache и от сервера Apache до приложения Java, развернутого в Jonas.
Когда я убиваю процесс JMeter, соединение с Apache закрывается с помощью [RST]. Затем Apache отправляет [FIN, ACK] Джонасу. Джонас не отправил все данные, поэтому продолжает отправлять данные. Йонас закрывает соединение позже [FIN,ACK]. Это поведение описано в TCP RFC.
Итак, проблема в том, что Apache получает все данные от Jonas, даже если Apache не может отправить их в JMeter.
У меня такой вопрос: может ли мое Java-приложение быть запущено при получении FIN, ACK от Apache?
2 ответа
Не напрямую, в конечном итоге java может выдать IOException из InputStream или OutputStream, но это зависит от платформы.
До выхода JDK 7 говорили о реализации Java "сырых сокетов", но почему-то я не думаю, что она когда-либо была запущена.
Может ли мое Java-приложение запускаться при получении FIN,ACK от Apache?
Да, но вы должны были бы читать из соединения. Вы получите конец потока в одной из его различных форм, в зависимости от того, какой метод чтения вы вызываете. Смотрите Javadoc.