我試圖在基於demux 2.0 RC1的基於demux的客戶端應用程序中執行同步寫入/讀取,但似乎卡住了。這裏是我的代碼: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並不熟悉,但出於好奇 - 如果您同時做所有事情,您是否必須使用期貨? – 2010-03-31 14:00:14
我相信如果你的應用程序通常是異步通信的,你只需要使用futures來同步讀/寫,但是在應用程序的任何給定點需要特殊情況。這就是我在這裏嘗試登錄的方式,而我的其他通信將被異步處理。 – 2010-03-31 16:31:18