如何在Netty 4+中使用ChannelTrafficShapingHandler?

高鸿武

我需要将一个大文件推送到客户端,但是我想限制速度(例如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()
                               );
                   }
               });

该演示不起作用,为什么?

弗雷德里克·布雷吉耶

您是否在FileServerHandler中管理通道写入功能?

如Netty API中所述,用于ChannelTrafficShapingHandler

在处理程序中,应该考虑使用channel.isWritable()和channelWritabilityChanged(ctx)处理可写性,或者在ctx.write()返回的将来通过future.addListener(new GenericFutureListener())处理可写性。

您还应该考虑使读写操作中的对象大小相对适合您所需的带宽:例如,以10KB / s的速度包含10 MB的对象将导致突发效果,而以1 MB / s的速度包含100 KB的对象应平稳由此TrafficShaping处理程序处理。

和初始化:

  • 第一项是以B / s为单位的写限制(强烈建议不要在此处1,对于1KB / s,最小为1024的值是最小的)
  • 第二项是B / S中的读取限制(强烈建议不要在此处1,对于1KB / s,最小为1024的值是最小的,否则为0)
  • 第一项是以毫秒为单位的间隔检查(此处1L表示每毫秒,因此强烈建议不要使用毫秒,每1秒最小间隔为1000)

您可以在此处看到一个示例(使用“丢弃”示例),尤其是:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Netty Client(4.1)中使用Socks4 / 5代理处理程序

来自分类Dev

如何在Netty中使用外部服务?

来自分类Dev

如何在Netty中使用多个ServerBootstrap对象

来自分类Dev

如何在Netty中使用TestWebSocketFrame提出不同的问题

来自分类Dev

如何在Netty 4中处理PING / PONG帧?

来自分类Dev

如何使用Netty 4暂停和继续阅读?

来自分类Dev

如何使用Netty 4暂停和继续阅读?

来自分类Dev

我如何在虚幻引擎4中使用Java

来自分类Dev

我如何在Spring4d中使用THasAttributeFilter

来自分类Dev

如何在lz4中使用tar?

来自分类Dev

如何在Laravel 4中使用子域?

来自分类Dev

如何在Rails 4 Pipeline中使用Galleria插件

来自分类常见问题

如何在Rails 4中使用字体

来自分类Dev

如何在Laravel 4雄辩的ORM中使用查询的IN或嵌套

来自分类Dev

如何在rails 4中使用params.require

来自分类Dev

如何在Rails 4中使用“或”链接条件条件?

来自分类Dev

如何在Rails 4中的CSS中使用打印样式?

来自分类Dev

如何在Unity中使用log4net?

来自分类Dev

如何在Glassfish中使用log4j

来自分类Dev

如何在MVC 4中使用图像保存模型

来自分类Dev

如何在Laravel 4中使用Sentry 2

来自分类Dev

如何在Proj4js中使用OpenLayers 3

来自分类Dev

Laravel 4:如何在子句中使用访问器

来自分类Dev

如何在Gulp 4中使用async / await?

来自分类Dev

您如何在neo4j中使用参数?

来自分类Dev

如何在neo4jclient中使用return *

来自分类Dev

如何在BootStrap4Xpages中使用3.2.0主题?

来自分类Dev

如何在REST服务中使用log4j

来自分类Dev

如何在4个表中使用Laravel的hasManyThrough