在Netty中,如何进行同步客户端调用并返回结果?以下是它在Apache组件中的工作原理:
HttpResponse response = httpRequester.execute();
我喜欢这样,我想在Netty中这样做。
我尝试这样的事情,但是如何设置“可调用的”#39;返回?
ChannelFuture f = ctx.writeAndFlush(msg);
f.awaitUninterruptibly();
HttpContent ans = (HttpContent) f.get();
似乎这是错误的道路 - 死胡同。请帮助/指导?
答案 0 :(得分:0)
正确的方法是使用单独的blockingIOProcessor.execute(() -> {
try {
HttpContent ans = (HttpContent) f.get();
ctx.writeAndFlush(ans);
} catch (Exception e) {
ctx.writeAndFlush("Error during blocking operation.");
}
});
进行阻止操作。例如:
blockingIOProcessor
其中ThreadPoolExecutor
是{{1}}的实例。
在上面的代码中,您将阻塞操作传递给单独的线程以及管道上下文。阻塞操作完成后,通过上下文将响应返回给调用管道,客户端会收到请求结果。
在这种情况下,您不会阻止netty EventLoops。