Calcul de la vitesse de connexion / téléchargement
J'ai un client et un serveur programme (à la fois en Obj-C) et je suis à transférer des fichiers entre deux périphériques à l'aide de programmes.
Le transfert fonctionne très bien, mais je voudrais afficher à l'utilisateur que le taux de transfert qu'ils obtiennent.
Donc je sais que la taille totale du fichier, et le fichier a été transféré, il est un moyen de comprendre le taux de transfert à partir de cette information, et si non, quelles informations dois-je besoin de calculer le taux de transfert?
Grâce
source d'informationauteur kdbdallas
Vous devez vous connecter pour publier un commentaire.
Dès que vous commencez à le télécharger, capture l'heure actuelle du système et de le stocker en tant que le "start time". Ensuite, tout ce que vous devez faire pour calculer la vitesse de transfert à tout moment pendant le transfert, c'est de regarder l'heure système nouveau et l'utiliser comme le "temps actuel" pour calculer le temps total passé jusqu'à présent:
Vous voudrez probablement utiliser la deuxième ou une précision à la milliseconde avec le temps, et bien sûr possible de multiplier le résultat par 8 si vous souhaitez bits/seconde.
Puisque vous êtes à l'aide de Cacao, vous pouvez utiliser le NSDate classe pour obtenir le timestamp. Par exemple, utilisez la commande suivante lorsque vous démarrez le transfert:
Puis vérifier périodiquement le taux de transfert en utilisant:
Naïve façon est
bytes_downloaded /(now - start_time)
mais qui devient inexacte si la vitesse de connexion varie considérablement, ou si l'utilisateur démarre un autre téléchargement (peut-être dans une autre application) à mi-chemin par le biais de votre téléchargement. Ces deux peuvent se produire si l'utilisateur exécute un torrent au fond.Une meilleure façon (mais plus difficile à mettre en œuvre), est de tenir un tableau de périodique d'échantillons et de les présenter à la moyenne.
Commencer avec un tableau contenant 0. Le tableau est d'échantillons, et chaque échantillon est le nombre d'octets téléchargés depuis l'exemple précédent. Puis démarrer le téléchargement.
Chaque demi-seconde (vous pouvez essayer différents intervalles de temps), de mesurer le nombre d'octets que vous avez téléchargé, puis soustraire le total précédent de ce nouveau total. Ajouter la différence que le nouveau dernier élément dans le tableau. Si ce qui pousse le tableau au-delà d'une certaine taille, lop off le premier élément (la plus ancienne de l'échantillon). Ensuite, présentent la moyenne de tous les échantillons.
Vous devez garder quelque part entre 2 et 5 secondes d'échantillons, et l'intervalle doit être quelque part entre 0,5 et 1 seconde (c'est un compromis entre la monnaie et de la performance).
Vous pouvez également supprimer le premier élément de la matrice après la récupérer si elle est égale à zéro. Cela rend votre départ reportage plus précis et vous aide à récupérer plus rapidement les étals, puisque vous n'êtes pas, y compris l'ancien zéros dans la moyenne.
Vous aurez besoin de savoir
Octets envoyés depuis le début (Pour calculer la moyenne des taux de transfert)
Octets envoyés depuis la dernière seconde (afin De calculer le courant de la vitesse de transfert.)
Garder une trace du temps que le transfert est prise. Le taux de transfert est tout simplement octets transférés/secondes écoulées, en d'autres termes octets par seconde. Vous n'avez pas besoin de la taille totale de cette. (Vous pouvez également afficher les %, ce qui est d'octets transférés/nombre total d'octets*100)