【发布时间】:2018-05-12 14:56:59
【问题描述】:
Netty 服务器正在通过 10G 链路接收来自第 3 方客户端的流量。我必须通过 1G 链接使用 Netty 客户端将此流量转发到其他主机。 netty 是否有任何 API 可以用来估计我的 Netty 客户端(1G 链接)的写入速度,以便我可以使用这些信息来限制我的 Netty 服务器(10G 链接)的带宽?
【问题讨论】:
标签: netty
Netty 服务器正在通过 10G 链路接收来自第 3 方客户端的流量。我必须通过 1G 链接使用 Netty 客户端将此流量转发到其他主机。 netty 是否有任何 API 可以用来估计我的 Netty 客户端(1G 链接)的写入速度,以便我可以使用这些信息来限制我的 Netty 服务器(10G 链接)的带宽?
【问题讨论】:
标签: netty
正确的方法是使用 TCP 背压,这意味着您的代理读取的内容不会超过其可以写入的内容。这是通过仅在您准备好接收更多时发送 TCP ACK 信号来实现的。
仅基于吞吐量测量的方法不适合,因为它不处理临时降级。 (通过计算滑动时间窗口中缓冲区的大小来实现这种测量是微不足道的。)
Netty 提供了一个用于 TCP 背压的 API,这正是你所需要的。在写入成功后,您“只是”必须将 ChannelOption.AUTO_READ 设置为 false 并显式调用 Channel.read() 来自动读取。
我建议您仔细查看Netty's sample proxy,它会禁用AUTO_READ。
LittleProxy 是一段更复杂的代码,它还监控吞吐量。
【讨论】: