Java 在Netty客户端中处理来自服务器的响应
我正在使用Netty编写一个JavaFX应用程序来实现一个自定义协议。没有会话状态,但我希望将服务器响应与特定出站请求关联(并将结果返回到正确的JavaFXJava 在Netty客户端中处理来自服务器的响应,java,netty,Java,Netty,我正在使用Netty编写一个JavaFX应用程序来实现一个自定义协议。没有会话状态,但我希望将服务器响应与特定出站请求关联(并将结果返回到正确的JavaFX任务),到目前为止,我无法在客户端代码中这样做,因为响应未来是一个通道未来 我试图寻找如何配置管道,以某种方式安装ChannelHandlers,该管道将在共享上下文变量中共享信息,但我找不到任何有意义的内容 有谁能推荐一个惯用的地方,在那里我可以用Netty中的响应“完成”UI任务?Netty无法为您完成这些工作,因为它无法理解配对机制。在
任务
),到目前为止,我无法在客户端代码中这样做,因为响应未来是一个通道未来
我试图寻找如何配置管道
,以某种方式安装ChannelHandlers
,该管道将在共享上下文变量中共享信息,但我找不到任何有意义的内容
有谁能推荐一个惯用的地方,在那里我可以用Netty中的响应“完成”UI任务?Netty无法为您完成这些工作,因为它无法理解配对机制。在客户端,您需要实现
ChannelHandler
,并将初始值设定项传递给.handler(handler)
方法。有关详细信息,请参阅。在handlerchannelRead
方法中,处理来自服务器的响应,将其反序列化,并根据特定于应用程序对的机制,使用先前创建的Future
完成响应。Future
不一定是Netty Future,因为该部分完全没有Netty处理
对于配对,我假设您使用发送到服务器的某个id,服务器将相同的id发送回客户端。因此,在这种情况下,一些
MapNetty无法为您完成这些工作,因为它无法理解配对机制。在客户端,您需要实现ChannelHandler
,并将初始值设定项传递给.handler(handler)
方法。有关详细信息,请参阅。在handlerchannelRead
方法中,处理来自服务器的响应,将其反序列化,并根据特定于应用程序对的机制,使用先前创建的Future
完成响应。Future
不一定是Netty Future,因为该部分完全没有Netty处理
对于配对,我假设您使用发送到服务器的某个id,服务器将相同的id发送回客户端。在这种情况下,一些MapSo基本上是这样的。保留初始值设定项中使用的管道,并保留对Task@Eddy:部分是,以他们构造处理程序的方式。但是请注意,处理程序是为连接创建的(或者甚至可以共享),因此,如果对多个请求重用同一连接,则不可能为其提供对Request/Future的引用。您需要维护请求ID到SettableFuture或回调的映射,然后在收到相应响应时完成。保留初始值设定项中使用的管道,并保留对Task@Eddy:部分是,以他们构造处理程序的方式。但是请注意,处理程序是为连接创建的(或者甚至可以共享),因此,如果对多个请求重用同一连接,则不可能为其提供对Request/Future的引用。您需要维护请求ID到SettableFuture或回调的映射,然后在收到适当的响应后完成该映射。
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());
}
}
});