3

私は、地理的に分散した多数のノードからS3バケットにフラッシュビデオファイルをアップロードするプロジェクトに取り組んでいます。

ビデオファイルはそれぞれ約2〜3 MBで、10分ごとに(ノードごとに)1つのファイルのみを送信しますが、これらのノードはストリーミングメディアをCDN、および場所が原因で、最大512kのアップロードしか取得できません。

私はASW-S3gemを調査してきましたが、レート制限はありませんが、IOストリームを渡すことができることを認識しています。これを考えると、readメソッドをオーバーライドするレート制限ストリームを作成し、レート制限ロジックを追加して(たとえば、最も単純な形式でsleepは読み取り間の呼び出し)、オーバーライドされたスーパーを呼び出すことができるかどうか疑問に思っています。方法。

私が検討したもう1つのオプションは、Net :: HTTPのコードをハッキングsend_request_with_body_streamし、ループを使用しているメソッドにレート制限を設定するwhileことですが、どちらが最適なオプションかは完全にはわかりません。

私はIOクラスを拡張しようとしましたが、それはまったく機能せず、単にクラスから継承してclass ThrottledIO < IOも何もしませんでした。

任意の提案をいただければ幸いです。

4

2 に答える 2

4

IO を「拡張」したい場合は、デリゲートを使用する必要があります。これにより、オブジェクトのすべての「外部」リーダーによって使用される IO オブジェクトの周りに「ファサード」が配置されますが、オブジェクト自体の操作には影響しません。

一般的に有用であることが証明されたので、それを宝石に抽出しました

から読み取られる IO の例を次に示します。

http://rubygems.org/gems/progressive_io

ここには、すべての読み取り方法に追加される側面があります。それを拡張して基本的な調整を行うことができると思います。完了したら、ファイルをラップすることができます。

 throttled_file = ProgressiveIO.new(some_file) do | offset, size |
    # compute rate and if needed sleep()
 end
于 2010-03-15T17:15:52.587 に答える
0

aiaio の active_resource_throttleを使用して、作業中のプロジェクトで Harvest API からプルされるリクエストを制限しました。私はそれを設定しませんでしたが、動作します。

于 2010-03-15T14:21:22.047 に答える