2010-06-28 11 views
0

Je télécharge des fichiers en utilisant la méthode upload() de la classe FileReference. Je veux afficher la vitesse de connexion actuelle et je me demandais ce qui était un bon moyen de le faire.AS3: Calcul de la vitesse (ou du débit) de téléchargement en cours

Ma technique actuelle est d'utiliser une minuterie tous les 1 mili secondes, comme suit:

var speed:Function = function(event:TimerEvent):void { 
    speed = Math.round((currentBytes - lastBytes)/1024); 
    lastBytes = currentBytes; 
} 
var speedTimer:Timer = new Timer(1000); 
speedTimer.addEventListener(TimerEvent.TIMER, uploadSpeed); 

et currentBytes dans le se prépare ProgressEvent.PROGRESS. Cette technique semble imprécise. Je me demandais quelles autres façons je pourrais utiliser pour calculer la vitesse de téléchargement pendant le téléchargement et l'afficher en temps réel.

Toutes idées ou opinions sont les bienvenues!

Merci beaucoup,

Rudy

Répondre

0

Si ce bloc de code est un copier-coller, il ne fonctionnera certainement pas comme prévu. Vous déclarez speed comme une fonction dans laquelle vous semblez le redéfinir comme un nombre. J'apprécie que l'IDE Flash vous laisse sortir avec une grammaire sommaire, mais un code comme ça va vous mener à toutes sortes de problèmes. Essayez d'être explicite lors de l'écriture de votre code.

Essayez quelque chose comme ça, en remplaçant yourLoader avec tout identifiant que vous avez attribué à l'Uploader:

private var speed:Number = 0; 
private var lastBytes:uint = 0; 

private function uploadSpeed(event:TimerEvent):void 
{ 
    speed = Math.round((yourLoader.currentBytes - lastBytes)/1024); 
    lastBytes = yourLoader.currentBytes; 
} 

private var speedTimer:Timer = new Timer(1000); 
speedTimer.addEventListener(TimerEvent.TIMER, uploadSpeed); 

Cela devrait calculer le nombre d'octets déplacés dans 1 seconde intervalles.

Edit:

Vous voudrez peut-être faire l'intervalle un peu plus petit que 1000ms et calculer une vitesse moyenne pour vos derniers n échantillons. Cela rendrait le nombre de vos utilisateurs voir plus stable que ce qu'il fait probablement maintenant. Faire la vitesse un Array et .push() le dernier échantillon. Utilisez .shift() pour déposer les échantillons les plus anciens afin de ne pas perdre trop de précision. Les essais et les erreurs vous donneront une meilleure idée du nombre d'échantillons à conserver et de la fréquence à laquelle ils seront prélevés.

+0

Ce n'était pas une ligne par ligne copier et coller, j'ai essayé de le réécrire rapidement ici et de définir le nom "vitesse" deux fois. Ce n'est pas le cas dans mon programme, mais bonne prise, merci. J'aime l'idée d'un tableau et de pousser les éléments et de calculer simplement une moyenne de n échantillons. Cela le rendra plus stable (bien que les baisses soudaines ou l'augmentation de la vitesse prenne du temps à se refléter), mais c'est toujours une meilleure solution. Je vous remercie! – Rudy

0

Vous pouvez moniter la vitesse de téléchargement sur le serveur, puis envoyer ces données au client. Cette technique est souvent utilisée pour les formulaires de téléchargement de fichiers ajax.

+0

Très bien, merci. Si je devais utiliser uniquement le client, y a-t-il une bonne méthode pour le côté client? – Rudy