当前位置: 首页 > 知识库问答 >
问题:

具有同步请求响应的Netty客户端

宗政深
2023-03-14

我正在尝试创建一个基于网络的网络客户端。我根据网络站点中给出的示例编写了代码。但问题是,响应是由客户端处理程序处理的

我做的一件事是在HttpTarget中创建一个setResponse()方法

因此,基本上我想同步进行,即在HttpSnoopClient中发送一个请求(channel.writeandFlush(req)),然后等待,直到HttpSnoopCLientHandler收到响应

谁能告诉我一个好方法。提前致谢!

共有2个答案

华君浩
2023-03-14

当您为每个连接创建一个新的HttpSnoopClientHandler时,我会考虑将HttpSnoopClientHandler转换为ChannelDuplexHandler。在write方法中,您可以存储对传出超文本传输协议请求的引用。当收到响应时,您可以使用(Channel、Request、响应)调用setResponse方法。这应该提供足够的上下文,以便您可以正确处理响应。

如果您的客户端是纯请求/响应,不单独发出不相关的请求,并且您希望应用程序线程按顺序处理响应,则可以使用 SynchronousQueue 来协调响应,并允许主线程继续。或者,您的回调可以在内部处理响应。

您还可以扩展这种技术来使用HTTP管道。HTTP管道保证响应按照发出请求的顺序返回。在HttpSnoopClientHandler中,您维护一个请求队列。当每个响应被返回时,您将它与队列前面的请求进行匹配。

常子濯
2023-03-14

我有一个类似的用例,我必须阻止并发请求,直到一个资源的请求完成。我实现了一个ConcurrentHashMap

频道阅读-

if(map.contains(reqKey)){
    map.add(reqKey, list.add(ctx))
    //do nothing with AUTO_READ = false and do not initiate any ctx.* methods
}else{
    //firstRequest
    map.add(reqKey, new ArrayList<CTX>(){{ add(ctx);}})
    //continue with request execution
    //cache response and raise event on completion
}

用户事件触发-

onCompletionEvent {

    ctxList = map.get(reqKey).clone();
    map.remove(reqKey);
    for(blockedCtx : ctxList){
        //respond back with cached response to each blockedCtx
    }

}

@norman-maurer,你能对此发表你的看法吗!!!

 类似资料:
  • 我正在创建一个服务器,该服务器使用来自许多来源的命令,例如JMS,SNMP,HTTP等。这些都是异步的,并且工作正常。服务器维护与单个传统硬件项目的单个连接,该项目具有具有自定义TCP协议的请求/应答体系结构。理想情况下,我想要一个像这样的阻塞类型方法的命令 或者这个异步类型的方法 我对Netty和异步编程比较陌生,基本上是边学边学。我目前的想法是,我的类将具有公共同步问题CommandToLeg

  • 我已经创建了一个简单的Jersey客户端,它能够成功地使用有效负载执行POST请求。但现在它正在等待来自httpendpoint的响应: 问:代码是否有可能不等待响应。 我试图阅读泽西客户端文档,以确定我的代码是否有可能不等待响应?我看到我们只能在读取响应后关闭连接,但在我的情况下没有用。我想在将有效负载发布到endpoint后立即关闭连接。 我只需要触发并忘记POST请求,因为我不关心响应。这是

  • 问题内容: 首先,让我解释一下上下文: 我必须创建一个客户端,该客户端将发送许多HTTP请求以下载图像。这些请求必须是异步的,因为一旦完成图像,它将被添加到队列中,然后打印到屏幕上。由于图像可能很大且响应分块,因此我的处理程序必须将其聚合到缓冲区中。 因此,我遵循Netty示例代码(HTTP勺示例)。 目前,我有三个静态映射,用于为每个通道存储通道ID和缓冲区/块布尔值/我的最终对象。 在那之后,

  • 我有一些文件要上传,有些文件失败了,因为帖子是异步的,而不是同步的。 我正在尝试将此调用作为同步调用。 我想等回应。 如何将此调用设为同步调用? 任何帮助感谢!

  • 问题内容: 我想记录一个axis2客户端发出的所有请求/响应。我试图在http://code.google.com/support/bin/answer.py?hl=zh_CN&answer=15137中创建一个称为describer 的文件,但没有成功(我没有日志文件)。 请求是通过https发出的,我不确定是否重要。我试过了 和 没有成功。 问题答案: 对于SOAP消息的Axis2客户端日志记

  • 我试图以一种干净的方式构建应用程序的体系结构。我想我可以在Netty中做到这一点,因为它是一个著名的java网络框架选项。 我有连接到Netty服务器的设备(通过GPRS的TCP)。假设它们都是永久连接的(保持存活),有几种情况我需要用这个架构来描述: 情况1:设备可以向Netty发送消息,并且Netty响应该消息 情况2:设备可以向Netty发送消息,并且Netty对该消息做出响应,但是Nett