我正在使用Netty編寫JavaFX應用程序來實現自定義協議。沒有會話狀態,但我想將服務器響應關聯到特定的出站請求(並將結果返回到正確的JavaFX Task
。)到目前爲止,我還沒有能夠在客戶端代碼中這樣做,因爲responseFuture是一個ChannelFuture<Void>
。在Netty客戶端處理來自服務器的響應
future = tcpBoostrap.connect(address, 3333).sync();
final Channel channel = future.awaitUninterruptibly().channel();
ChannelFuture responseFuture = channel.writeAndFlush(requestBuilder.build());
responseFuture.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture channelFuture) throws Exception {
if (channelFuture.isSuccess()) {
logger.debug("completed operation: {}", channelFuture.toString());
}
}
});
我試圖尋找如何配置PipeLine
以某種方式安裝ChannelHandlers
將共享在共享上下文變量的信息,但我找不到任何顯著。
任何人都可以提出的地方我可以填充UI任務,我可以「完成」與Netty的響應的地方嗎?
所以基本上就像[這個答案](http://stackoverflow.com/a/9048781/261984)。保持初始化器中使用的管道和'addLast'客戶端處理程序,該客戶端處理程序持有任務參考號 – Eddy
@Eddy:部分是,以他們構造處理程序的方式。但是請注意,該處理程序是爲連接而創建的(或者甚至可以共享),因此如果您對多個請求重複使用相同的連接,則無法爲它提供對Request/Future的引用。您需要維護SettableFuture或回調的請求標識的映射,然後在收到適當的響應後完成。 –