使用netty和第三方阻止API

时间:2015-06-22 21:15:22

标签: java asynchronous netty

我正在使用第三方拦截API。我将按如下方式使用此API:

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

blockingAPI()轮询服务器以获取特定属性,直到获得响应。

为了在某种程度上使事情异步,我可以在一个单独的线程中产生这个API调用。并使用Java实现回调来处理响应。我想知道我是否可以在这种情况下使用netty框架,以及我该如何做到这一点?我看到的例子涉及一个监听客户端并与客户端通信的服务器,我不确定我的用例是如何适应的。

如果无法使用netty,我最好的选择是生成一个新线程并在Java中实现回调吗?

1 个答案:

答案 0 :(得分:0)

不确定你真正尝试做什么:

  1. 在内部生成一个新线程:您可以将LocalChannel与Netty一起使用以进行JVM内部进程通信,从而具有您想要的内容,而无需任何网络考虑(仅在JVM内)。 blockingAPI将在ServerLocalChannel端计算,而一旦客户端通过同一LocalChannel返回响应,结果将被写入。

  2. Spawn但是有来自外部(网络)的请求,那么当然也可以在那里使用Netty。也许仍然保持LocalChannel逻辑来分离网络以进行计算。

  3. 请注意,我可以建议使用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);
    }