Сессия Apache MINA закрыть перезвонить - PullRequest
1 голос
/ 26 июля 2011

Apache Mina - 2.0.1

У меня есть IoHandlerAdapter, который имеет обратные вызовы на sessionOpened и sessionClosed.Когда я открываю сеанс, я захожу на сервер и начинаю отправлять запросы, в "sessionClosed" я просто перезапускаю свое приложение.

Мое приложение выполняет проверку

if(!session.isClosing()) {
   //write to socket
} else {
   //throw a runtime exception. Hopefully the sessionClosed API gets 
   //called soon and the next time this call will succeed.
}

Однако я заметил, чтохотя session.isClosing () возвращает true, сессия фактически никогда не закрывается.то есть я не получаю обратный вызов в моем обработчике.Это возможно?Как я могу смягчить против такого риска.Может кто-нибудь объяснить, сколько времени требуется для вызова обратного вызова?

Ответы [ 2 ]

0 голосов
/ 02 мая 2015

Я тоже это видел. Я считаю, что это может быть состояние гонки в слое MINA:

http://mail-archives.apache.org/mod_mbox/mina-dev/200802.mbox/%3C15350882.post@talk.nabble.com%3E

0 голосов
/ 16 ноября 2011

ИМХО, вы должны использовать CloseFuture для этого senario следующим образом:

CloseFuture future = session.close(true);
// wait until its closed, up to 1 minute
future.awaitUninterruptibly(60000L);
if (future.isClosed()) {
    System.out.println("Previous connection close completed");
}
...