我正在使用Netty編寫將UDP消息發送到服務器的客戶端應用程序。總之,我使用這段代碼寫的流渠道:如何模擬未完成的Netty ChannelFuture
ChannelFuture future = channel.write(request, remoteInetSocketAddress);
future.awaitUninterruptibly(timeout);
if(!future.isDone()){
//abort logic
}
一切工作正常,但有一點:我無法測試中止邏輯,我不能寫失敗即即使服務器關閉,未來也會成功完成。寫操作通常需要大約1 ms,因此設置很少的超時並不會有太大的幫助。
我知道優先的方式是使用異步模型而不是await()調用,但是對於我的場景,我需要它是同步的,我需要確保它在某個時刻完成。
有誰知道我該如何模擬未完成的未來?
非常感謝提前! MM
是的,嘲諷的可能是一個解決方案,但我希望看到未來未能完成的真正原因。將數據包發送到虛假服務器不起作用 - 未來實際上已經成功完成。 – user1318992
再次看看你的例子,我發現上面的答案並不真正符合這個問題。你確定你也想看看isDone()嗎?如果爲false,則表示寫入操作未完成,可能仍會成功或失敗。我一味地認爲你的意思是isSuccess()。在這種情況下,發送到「0.0.0.0」端口1會導致失敗。 –
感謝您的輸入。是的,我確定我想看看isDone()。其實我有一個生產問題,我觀察到isDone()在我的情況下返回false。問題是我無法在測試環境中重現問題。 – user1318992