Netty客户端,如何从发送到服务器的请求中获取响应
我想把一个脾气暴躁的客户撮合起来。我需要发送一个请求到一个服务器(我无法控制),我希望得到一个响应 我不太确定如何回复 如果我有:Netty客户端,如何从发送到服务器的请求中获取响应,netty,Netty,我想把一个脾气暴躁的客户撮合起来。我需要发送一个请求到一个服务器(我无法控制),我希望得到一个响应 我不太确定如何回复 如果我有: ChannelFuture future = bootstrap.connect(new InetSocketAddress("foo.com", 1654)); Channel connector = future.awaitUninterruptibly().getChannel(); ChannelFuture response = connector.wri
ChannelFuture future = bootstrap.connect(new InetSocketAddress("foo.com", 1654));
Channel connector = future.awaitUninterruptibly().getChannel();
ChannelFuture response = connector.write(query);
如何从响应通道中获取响应数据?我是否需要向引导管道添加ChannelHandler?如果是,我如何将响应与请求关联
谢谢,是的,您需要添加一个
ChannelHandler
。在您的情况下,最简单的方法是扩展SimpleChannelUpstreamHandler
并覆盖channelConnected(…)
方法和messageReceived(…)
方法。在channelConnected
中,您将启动频道。写入(…)
并在messageReceived
中接收响应。如果响应可以以不同的顺序出现,那么您需要编写自己的处理代码
另一种解决方案是在调用write之前向管道中添加SimpleChannelUpstreamHandler
。大概是这样的:
channel.getPipeline().addLast("yourHandlerName", new SimpleChannelUpstreamHandler()) {
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
// remove handler after receiving response
ctx.getPipeline().remove(this);
// do logic
...
}
});
首先,您可以参考localtime的示例。在“LocalTimeClientHandler”的处理程序中,您可以找到阻止请求/响应的技巧 但这仍然是一个“hello world”展示项目,因此我们仍然需要考虑两个问题:
你是否最终找到了你问题的答案,因为我有一个非常相同的问题…谢谢你的回答;很难相信未来的渠道不会像。。。a
未来
。我难以置信地在谷歌上搜索了一个小时,终于在这里找到了你的帖子,上面有“netty”的标签。我注意到你涉及到一个关于4.0 alpha的问题-有任何移动吗?就这样,我开始实现我的ChannelHandler
子类实现的Response
接口。我将它和ChannelFuture
传递给实现Future
并充当包装器的类的构造函数。我想上吊自杀。