Scala 播放迭代限制

Scala 播放迭代限制,scala,playframework-2.0,iterate,Scala,Playframework 2.0,Iterate,我正在使用scala和Play编写一个流式web广播框架。我依赖迭代器来进行实际的流式处理,但我遇到了一个问题,即试图防止贪婪的客户端下载数据过快,并为所有客户端使用流。为此,我一直在尝试创建一个枚举,它将限制枚举器生成数据的速度。下面是我的枚举表 val throttlingIteratee = Iteratee.foldM[Array[Byte], Array[Byte]](new Array[Byte](0)) { (result, chunk) => val prom = P

我正在使用scala和Play编写一个流式web广播框架。我依赖迭代器来进行实际的流式处理,但我遇到了一个问题,即试图防止贪婪的客户端下载数据过快,并为所有客户端使用流。为此,我一直在尝试创建一个枚举,它将限制枚举器生成数据的速度。下面是我的枚举表

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  
)
我的想法是使用计时器任务创建throttlingIteratee并将其与Enumerate.grouped函数配对。这似乎工作得相当好,但我很难确定块大小的值。我想让它以与音频播放相同的速率生成块。我的音频文件编码为82kpbs,我试图用字节计算,但是我得到的值似乎太小,音频播放速度比数据流快

我的问题有两个方面。我现有的基本方法是好的吗?如果是,我该如何根据音频文件的比特率设置块大小。

以下几点:

  • 1kbps=每秒1000位=每秒125字节。在你的例子中,每秒10250字节
  • 我看你的代码没有任何问题。我假设为了清晰起见,您删除了代码来处理失败
  • 我不知道您的用例,但我认为在代理或web服务器中设置这种类型的限制比在代码中更容易

谢谢,我已经有一段时间没碰过这个问题了,但我会努力挖掘我的旧代码,并在本周末测试您的数字,这样我就可以接受这个答案了