处理Netty客户端中服务器的响应

时间:2016-03-01 12:17:48

标签: java netty

我正在使用Netty编写JavaFX应用程序来实现自定义协议。没有会话状态,但我想将服务器响应与特定的出站请求相关联(并将结果返回到正确的JavaFX Task。)到目前为止,我还没有能够在客户端代码,因为responseFuture是ChannelFuture<Void>

future = tcpBoostrap.connect(address, 3333).sync();
final Channel channel = future.awaitUninterruptibly().channel();

ChannelFuture responseFuture = channel.writeAndFlush(requestBuilder.build());
responseFuture.addListener(new ChannelFutureListener() {
    @Override
    public void operationComplete(ChannelFuture channelFuture) throws Exception {
        if (channelFuture.isSuccess()) {
            logger.debug("completed operation: {}", channelFuture.toString());
        }
    }
});

我尝试了一下如何配置PipeLine以某种方式安装ChannelHandlers,它将共享共享上下文变量中的信息但我找不到任何重要信息。

任何人都可以建议我可以填充UI任务的惯用场所,我可以完成&#34;完成&#34;在Netty做出回应?

1 个答案:

答案 0 :(得分:0)

Netty无法为您做这样的工作,因为它无法理解配对机制。在客户端,您需要实现ChannelHandler并将初始化程序传递给.handler(handler)方法。有关详细信息,请参阅Netty TimeClient example。在处理程序channelRead方法处理来自服务器的响应,反序列化它,并根据您之前创建的Future应用程序对特定的机制完成它。 Future不一定是Netty的未来,因为这部分完全不受Netty处理。

对于配对,我假设你使用一些你发送到服务器的id,服务器将相同的id发送回客户端。所以在这种情况下,一些Map<Long, Future<?>>就足够了。

相关问题