Scala 播放迭代限制
我正在使用scala和Play编写一个流式web广播框架。我依赖迭代器来进行实际的流式处理,但我遇到了一个问题,即试图防止贪婪的客户端下载数据过快,并为所有客户端使用流。为此,我一直在尝试创建一个枚举,它将限制枚举器生成数据的速度。下面是我的枚举表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
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服务器中设置这种类型的限制比在代码中更容易