2015-06-22 167 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); 
}