加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

斯卡拉 – 玩Iteratee节流

发布时间:2020-12-16 18:46:55 所属栏目:安全 来源:网络整理
导读:我正在使用 scala和Play编写流式网络广播框架.我依靠Iteratees进行实际的流式传输,但是我遇到了一个问题,试图阻止贪婪的客户端过快下载数据,并为所有客户端使用流.为此,我一直在尝试创建一个Enumeratee,它将限制Enumerator生成数据的速度.这是我的Enumeratee
我正在使用 scala和Play编写流式网络广播框架.我依靠Iteratees进行实际的流式传输,但是我遇到了一个问题,试图阻止贪婪的客户端过快下载数据,并为所有客户端使用流.为此,我一直在尝试创建一个Enumeratee,它将限制Enumerator生成数据的速度.这是我的Enumeratee的样子

val throttlingIteratee = Iteratee.foldM[Array[Byte],Array[Byte]](new Array[Byte](0)) {
(result,chunk) => 
  val prom = Promise[Array[Byte]]()
  timer.schedule(new TimerTask{
    def run() = prom.success(result ++ chunk)
    },1000)
  prom.future    
}

private val chunker = Enumeratee.grouped(  
    Traversable.take[Array[Byte]](31792) &>> throttlingIteratee  
)

我的想法是,我使用计时器任务来创建一个限制程序,并将其与Enumeratee.grouped函数配对.这似乎工作得相当好,但我无法弄清楚用于块大小的值.我希望这个产生的块与音频播放的速率大致相同.我的音频文件编码为82kpbs,我试图用字节计算,但我提出的值似乎太小,音频播放速度比数据流速快.

我的问题是双重的.我的基本方法是不是很好?如果是,如何根据音频文件的比特率设置块大小.

解决方法

一些东西:

> 1 kbps =每秒1000比特=每秒125字节.所以在你的情况下每秒10,250字节.>我认为您的代码没有任何问题.我假设你为了清晰起见而删除了处理失败的代码.>我不知道您的用例,但我认为设置这种类型的限制可以更容易地在代理或Web服务器中而不是在您的代码中完成.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读