我正在使用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做出回应?
答案 0 :(得分:0)
Netty无法为您做这样的工作,因为它无法理解配对机制。在客户端,您需要实现ChannelHandler
并将初始化程序传递给.handler(handler)
方法。有关详细信息,请参阅Netty TimeClient example。在处理程序channelRead
方法处理来自服务器的响应,反序列化它,并根据您之前创建的Future
应用程序对特定的机制完成它。 Future
不一定是Netty的未来,因为这部分完全不受Netty处理。
对于配对,我假设你使用一些你发送到服务器的id,服务器将相同的id发送回客户端。所以在这种情况下,一些Map<Long, Future<?>>
就足够了。