【问题标题】:How to process one request at a time on the same TCP connection (Channel)?如何在同一个 TCP 连接(通道)上一次处理一个请求?
【发布时间】:2021-12-17 04:25:40
【问题描述】:

我们有一个使用NioServerSocketChannelHttpServerCodec 的Netty 服务器。我们观察到一个错误的客户端在同一个 TCP 连接(同一个 Channel 和 ChannelPipeline)上发送多个请求而不等待响应。可以使用 Netty 客户端重新创建这个坏客户端,并在最后使用 ctx.flush() 执行多个 ctx.write()s 以一次发送所有请求。

结果是 Netty 在同一管道中同时处理请求。有没有办法让 Netty 一次处理一个请求,在尝试处理下一个请求之前等待发回的响应或某些失败条件?或者这需要我们端的自定义逻辑来实现吗?

我们为每个请求设置了 Channel 属性,并且管道也会根据请求而变化,因此我们无法在同一个 Channel 上同时处理多个请求。

【问题讨论】:

    标签: netty


    【解决方案1】:

    HTTP 是全双工协议,因此发送多个 HTTP 请求而不等待响应是完全合法的。这种方法称为 HTTP 流水线。这就是 netty 默认情况下不允许这样做的原因。

    如果您只能处理一个连接上的请求,那么您将不得不添加一个拒绝后续请求的处理程序。

    【讨论】:

      猜你喜欢
      • 2014-01-03
      • 1970-01-01
      • 2020-07-12
      • 2021-12-29
      • 1970-01-01
      • 2019-03-30
      • 2017-03-17
      • 2019-05-11
      • 2013-04-27
      相关资源
      最近更新 更多