Я пытаюсь выполнить синхронную запись/чтение в клиентском приложении на основе demux с MINA 2.0 RC1, но, похоже, он застрял. Вот мой код:MINA: Выполнение синхронных запросов на запись/чтение ответов
public boolean login(final String username, final String password) {
// block inbound messages
session.getConfig().setUseReadOperation(true);
// send the login request
final LoginRequest loginRequest = new LoginRequest(username, password);
final WriteFuture writeFuture = session.write(loginRequest);
writeFuture.awaitUninterruptibly();
if (writeFuture.getException() != null) {
session.getConfig().setUseReadOperation(false);
return false;
}
// retrieve the login response
final ReadFuture readFuture = session.read();
readFuture.awaitUninterruptibly();
if (readFuture.getException() != null) {
session.getConfig().setUseReadOperation(false);
return false;
}
// stop blocking inbound messages
session.getConfig().setUseReadOperation(false);
// determine if the login info provided was valid
final LoginResponse loginResponse = (LoginResponse)readFuture.getMessage();
return loginResponse.getSuccess();
}
Я могу видеть на стороне сервера, который извлек LoginRequest объект, и сообщение LoginResponse отправляется. На стороне клиента DemuxingProtocolCodecFactory
получает ответ, но после ввода некоторых протоколов я вижу, что клиент застревает при вызове readFuture.awaitUninterruptibly()
.
Я не могу на всю жизнь понять, почему он застрял здесь, основываясь на моем собственном коде. Я правильно настроил операцию чтения true в конфигурации сеанса, что означает, что сообщения должны быть заблокированы. Однако, похоже, что сообщение больше не существует по времени, я пытаюсь синхронно читать ответные сообщения.
Любые подсказки относительно того, почему это не сработает для меня?
Я не знаком с MINA, но просто из любопытства - вам нужно использовать фьючерсы, если вы все делаете синхронно? –
Я считаю, что вам нужно использовать только фьючерсы для синхронного чтения/записи, если ваше приложение обычно передает асинхронно, но для конкретного случая в приложении требуется специальный случай. Вот что я пытаюсь сделать для входа в систему, тогда как остальное мое сообщение будет обрабатываться асинхронно. –