高鸿武*_*高鸿武 3 rate-limiting netty
我需要向客户端推送一个大文件,但我想限制速度(例如100Kb/s),如何使用ChannelTrafficShapingHandler?
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG, 100)
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline p = ch.pipeline();
p.addLast(
new StringEncoder(CharsetUtil.UTF_8),
new LineBasedFrameDecoder(8192),
new StringDecoder(CharsetUtil.UTF_8),
new ChannelTrafficShapingHandler(1,1,10L),
new ChunkedWriteHandler(),
new FileServerHandler()
);
}
});
Run Code Online (Sandbox Code Playgroud)
这个演示不起作用,为什么?
您是否在 FileServerHandler 中管理了通道写入功能?
正如 Netty API for ChannelTrafficShapingHandler 中所述
在您的处理程序中,您应该考虑使用 channel.isWritable() 和 channelWritabilityChanged(ctx) 来处理可写性,或通过 future.addListener(new GenericFutureListener()) 对 ctx.write() 返回的未来进行处理。
您还应该考虑在读取或写入操作中使对象大小相对适应您所需的带宽:例如,10 KB/s 的 10 MB 对象会导致突发效应,而 1 MB/s 的 100 KB 对象应该是平滑的由这个 TrafficShaping 处理程序处理。
和初始化:
您可以在此处查看示例(使用 Discard 示例),特别是:
| 归档时间: |
|
| 查看次数: |
2995 次 |
| 最近记录: |