Java 将netty与第三方阻止API一起使用

Java 将netty与第三方阻止API一起使用,java,asynchronous,netty,Java,Asynchronous,Netty,我正在使用第三方阻止API。我将按如下方式使用此API: while(true){ blockingAPI(); sendResultSomewhere(); } blockingAPI()轮询服务器的特定属性,直到它得到响应 为了使事情在某种程度上异步化,我可以在一个单独的线程中生成这个API调用。并使用Java实现回调来处理响应。我想知道我是否可以在这个场景中使用netty框架,以及如何做到这一点?我所看到的示例涉及一个侦听和与客户机通信的服务器,我不确定我的用例是否适合 如果netty不

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

while(true){
blockingAPI();
sendResultSomewhere();
}
blockingAPI()
轮询服务器的特定属性,直到它得到响应

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


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

不确定您真正想做什么:

  • 在内部生成一个新线程:您可以使用LocalChannel和Netty进行JVM进程内通信,从而获得您想要的东西,而无需任何网络考虑(仅在JVM内)。blockingAPI将在ServerLocalChannel端计算,而结果将在客户端通过同一LocalChannel返回响应后写入

  • 但是如果有来自外部(网络)的请求,那么Netty当然也可以在那里使用。可能仍然保留一个本地通道逻辑来分离网络进行计算

  • 请注意,我可以建议使用LocalChannel(执行阻塞任务)使用异步操作,以便在不阻塞Netty的网络IO线程的情况下发送到其他地方

    网络处理程序端:

    localChannel = creationWithinNetworkHandler(networkChannelCtx);
    localChannel.writeAndFlush(something);
    
    而LocalChannel处理程序服务器端可以是:

    void read0(ChannelHandlerContext ctx, someData) {
      blockingAPI();
      ctx.channel().writeAndFlush(answear).addFutureListener(Channels.CloseFuture);
    }
    
    void read0(ChannelHandlerContext ctx, answear) {
      //Using ctx from Network channel side
      networkCtx.writeAndFlush(answear);
    }
    
    LocalChannel处理程序客户端可以是:

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