限制Servlet中的下载文件带宽/速度

use*_*512 7 java servlets download

我们得到了高集负的java应用程序,它在集群模式下工作.

我需要为我们的客户添加下载和上传文件的功能.对于存储文件,我要去用户gridFs,不确定,这是最好的选择,但mongo可以集群化,mongo可以在diff节点之间复制数据.这正是我需要的.

不同的用户群应该受限于不同的带宽.根据一些业务规则,我应该限制某些用户的下载速度.我看到一些解决方案,

他们中的大多数工作方式相同.

  • 读一堆字节
  • 睡眠线程
  • 重复

Mongo只是简单地为我提供了InputStrem,我可以从该流中读取并写入servlet输出流.我不确定这是有效的方法.另外我担心,用户可以在下载过程中创建大量的concurent线程,这可能会影响性能.

这可能是servlet容器的问题吗?

如果它可能是一个问题,怎么可以避免?可能使用nio?

我更喜欢使用纯java解决方案.

任何帮助将受到高度赞赏.

Tom*_*icz 11

泄漏桶令牌桶算法可用于控制网络带宽.

编辑:我做了一些快速原型设计,并实现了利用Servlet 3.0异步处理的算法.结果非常好.完整的源代码可以在GitHub找到.玩得开心!

  • 我特别为你创建了一个示例应用程序:-)(参见编辑). (2认同)