如何通过Scala和Play以编程方式限制服务器上的下载速度

时间:2011-10-18 07:30:19

标签: scala playframework

所有

我正在使用Play框架和Scala进行项目。我需要能够限制来自我的服务器的下载速度,但确切的限制取决于用户,所以我不能只在我的nginx前端服务器中使用“limit_rate”。欢迎任何想法或搜索方向。

1 个答案:

答案 0 :(得分:6)

从我所看到的情况来看,我所能看到的任何东西都无法实现你想要的东西。

所以,我接近这个的方法是采用你自己的Play版本并修改源代码以便

  • HTTP Response object包含限制下载费率字段,您可以在特别想要限制此值时设置
  • 更改PlayHandler类(可能是writeChunk),它负责将响应写回浏览器,以便每秒暂停一定程度,以确保只按所需速率输出

Netty层可能有一个更简洁的解决方案,但我快速浏览了一下,找不到任何东西。然而,我不是Netty专家,所以你可能值得一看这里。

另一种方法是实现自己的扩展RenderBinary方法的Render方法,但是这仅限于文件下载,因此可能不是普遍适用的,但是对于特定场景需要较少的编码,并且可以完成无需修改任何核心播放代码。可以在PDF module by Nicolas Leroux

中找到自定义渲染方法的示例