2015-06-22 117 views
0

我正在使用第三方阻止API。直到它得到的迴應使用netty與第三方阻止API

while(true){ 
blockingAPI(); 
sendResultSomewhere(); 
} 

blockingAPI()輪詢服務器特定屬性:我會按照如下方式使用此API。

爲了使事物在某種程度上異步,我可以在一個單獨的線程中產生這個API調用。並在Java中執行回調以處理響應。我想知道在這種情況下是否可以使用netty框架,以及我該如何做到這一點?我所看到的例子涉及一個監聽服務器並與客戶端進行通信,我不確定我的用例如何適用。

如果netty不能使用,我最好的辦法是產生一個新的線程並實現一個在Java中回調?

回答

0

不知道你真正努力去做:

  1. 菌種內部一個新的線程:你可以使用LocalChannel與Netty的有內部JVM進程通信,因此有一些像你想,沒有任何網絡考慮(只在JVM內)。阻塞API將在ServerLocalChannel端計算,而客戶端通過同一個LocalChannel獲取響應後將寫入結果。

  2. 產卵但有來自外部(網絡)的請求,那麼Netty當然也可以在那裏使用。也許仍然保留一個LocalChannel邏輯來分隔網絡進行計算。

注意,我可以向推薦使用通過LocalChannel(執行任務阻塞)的異步操作,使得發送別的地方是不阻塞的Netty的網絡IO線程中完成的。

網絡處理器方面:

localChannel = creationWithinNetworkHandler(networkChannelCtx); 
localChannel.writeAndFlush(something); 

而LocalChannel處理程序服務器端可以像:

void read0(ChannelHandlerContext ctx, someData) { 
    blockingAPI(); 
    ctx.channel().writeAndFlush(answear).addFutureListener(Channels.CloseFuture); 
} 

和LocalChannel處理客戶端可爲:

void read0(ChannelHandlerContext ctx, answear) { 
    //Using ctx from Network channel side 
    networkCtx.writeAndFlush(answear); 
}