在Netty中,如何进行同步客户端调用并返回结果? (比如apache组件)

时间:2017-11-05 15:09:10

标签: netty

在Netty中,如何进行同步客户端调用并返回结果?以下是它在Apache组件中的工作原理:

HttpResponse response = httpRequester.execute();

我喜欢这样,我想在Netty中这样做。

我尝试这样的事情,但是如何设置“可调用的”#39;返回?

ChannelFuture f = ctx.writeAndFlush(msg);
f.awaitUninterruptibly();
HttpContent ans = (HttpContent) f.get();

似乎这是错误的道路 - 死胡同。请帮助/指导?

1 个答案:

答案 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。