我正在从多个地理分布式节点上传Flash视频文件到S3存储桶的项目中。
每个视频文件大小约为2-3MB,我们每十分钟仅发送一个文件(每个节点),但我们需要将消耗的带宽限制在大约20k/s左右。这是因为这些节点正在向CDN传送流媒体,由于位置限制,我们最大只能获得512k的上传速度。
我一直在研究ASW-S3 gem,虽然它没有提供任何形式的限速,但我知道你可以传入IO Stream。鉴于此,我在想是否可能创建一个限速流,覆盖“read”方法,添加限速逻辑(例如,在其最简单的形式下,在读取之间调用“sleep”)然后调用覆盖方法的超级方法。
我考虑的另一个选项是修改Net::HTTP的代码,并将限速放入“send_request_with_body_stream”方法,该方法使用while循环,但我不确定哪个选项更好。
我尝试扩展IO类,但那根本没有效果,仅从类中继承“class ThrottledIO < IO”并没有做任何事情。
非常感谢您的建议。