我正在从事一个项目,该项目涉及从多个地理分布的节点将 Flash 视频文件上传到 S3 存储桶。
每个视频文件大约 2-3mb,我们每十分钟只发送一个文件(每个节点),但是我们消耗的带宽需要限制在 ~20k/s,因为这些节点将流媒体传输到CDN,并且由于位置的原因,我们最多只能上传 512k。
我一直在研究 ASW-S3 gem,虽然它不提供任何速率限制,但我知道您可以传入 IO 流。鉴于此,我想知道是否有可能创建一个覆盖该read
方法的速率限制流,添加速率限制逻辑(例如,以最简单的形式sleep
在读取之间调用),然后调用被覆盖的超方法。
我考虑的另一个选择是破解 Net::HTTP 的代码并将速率限制放入send_request_with_body_stream
使用while
循环的方法中,但我不完全确定哪个是最佳选择。
我曾尝试扩展 IO 类,但这根本不起作用,只是从类中继承class ThrottledIO < IO
并没有做任何事情。
任何建议将不胜感激。