我正在使用第三方拦截API。我将按如下方式使用此API:
while(true){
blockingAPI();
sendResultSomewhere();
}
blockingAPI()
轮询服务器以获取特定属性,直到获得响应。
为了在某种程度上使事情异步,我可以在一个单独的线程中产生这个API调用。并使用Java实现回调来处理响应。我想知道我是否可以在这种情况下使用netty框架,以及我该如何做到这一点?我看到的例子涉及一个监听客户端并与客户端通信的服务器,我不确定我的用例是如何适应的。
如果无法使用netty,我最好的选择是生成一个新线程并在Java中实现回调吗?
答案 0 :(得分:0)
不确定你真正尝试做什么:
在内部生成一个新线程:您可以将LocalChannel与Netty一起使用以进行JVM内部进程通信,从而具有您想要的内容,而无需任何网络考虑(仅在JVM内)。 blockingAPI将在ServerLocalChannel端计算,而一旦客户端通过同一LocalChannel返回响应,结果将被写入。
Spawn但是有来自外部(网络)的请求,那么当然也可以在那里使用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);
}