Je travaille sur un projet qui consiste à télécharger des fichiers vidéo flash dans un compartiment S3 à partir d'un certain nombre de nœuds répartis géographiquement. Les fichiers vidéo font environ 2-3 Mo chacun, et nous n'envoyons qu'un seul fichier (par nœud) toutes les dix minutes, mais la bande passante que nous consommons doit être limitée à ~ 20k/s, car ces nœuds fournissent diffusion en continu vers un CDN, et en raison des emplacements, nous ne sommes en mesure d'obtenir le téléchargement max 512k.Taux de limitation d'un flux de fichiers ruby
J'ai regardé dans la gemme ASW-S3 et tandis qu'il n'offre aucune sorte de limitation de vitesse je suis conscient que vous pouvez passer dans un flux d'E/S. Compte tenu de cela, je me demande s'il pourrait être possible de créer un flux à débit limité qui remplace la méthode read
, ajoute dans la logique de limitation de débit (par exemple dans sa forme la plus simple un appel à sleep
entre lectures), puis appel au super de la méthode substituée. Une autre option que j'ai envisagée est de pirater le code pour Net :: HTTP et de mettre la limitation de débit dans la méthode send_request_with_body_stream
qui utilise une boucle while
, mais je ne suis pas sûr que ce soit la meilleure option.
J'ai essayé d'étendre la classe IO, mais cela n'a pas fonctionné du tout, héritant simplement de la classe avec class ThrottledIO < IO
n'a rien fait.
Toutes les suggestions seront grandement appréciées.