[résolu] Un débit bizarre

mars 2006 modifié dans API AppKit #1
Salut  :o

J'ai un gestionnaire de téléchargements et je voudrai gérer le débit.
Normalement avec mon 56k je vais à  3Ko/sec. Or, j'obtiens pour tout download du 1.4Ko/sec :
<br />- (void)download:(NSURLDownload *)download didReceiveDataOfLength:(unsigned)length<br />      NSString* lengthCorrect;<br />	lengthCorrect = [NSString stringWithFormat:NSLocalizedString(@&quot;%0.1fKo/sec&quot;,nil),(length/1000)];<br />NSLog(@&quot;%@&quot;, lengthCorrect);<br />


Normal ou pas normal ?

Merci d'avance,
Louka.

Réponses

  • LeChatNoirLeChatNoir Membre, Modérateur
    07:44 modifié #2
    Slt,
    ben déjà , je diviserai par 1024 pour être plus précis (1Ko=1024 octets).

    Et ensuite, dans cette mtéhode, je crois que le length est le nb d'octets reçus depuis le dernier appel donc ca ne te permet pas de calculer la vitesse ?!
    Surtout que la méthode n'est pas appelée 1 fois par seconde si ?

    Donc il faudrait connaitre le temps entre 2 appels pour bien faire.
  • 07:44 modifié #3
    Merci,

    pourtant,
    <br />bytesReceived = [[object objectForKey:@&quot;bytesReceived&quot;] floatValue];<br />bytesReceived=bytesReceived+length;
    

    Et bytesReceived devient le poids téléchargé. Donc si j'additionne avec 0 (bytesReceived au tout début) et que je lui rajoute length (le poids reçu à  l'instant t), j'obtiens le poids téléchargé à  cet instant. Et donc, length est bien le débit.
    :p
  • LeChatNoirLeChatNoir Membre, Modérateur
    07:44 modifié #4
    vitesse = poids/temps

    donc si tu veux une vitesse moyenne, au début de ton Dl, tu stocke la date.

    A chaque fois que tu veux rafraichir ou afficher ta vitesse, tu calcules :
    vitesse = (Nb octets reçus depuis le début)/(maintenant-daté début dl) (tout ça en secondes évidemment)

    Si tu veux une vitesse instantanée alors la formule se transforme en
    vitesse instantanée=(Nb octets reçus depuis le dernier rafraichissement)/(maintenant-daté dernier rafraichissement) (tout ça en secondes évidemment)

    Dans ton explication, j'ai pas tout compris.
    Si tu as reçu 1.4 Ko en 1 sec, ton débit est bien 1.4Ko/sec mais si tu l'as reçu en 2 sec, il sera de 0.7 Ko/sec.

  • mars 2006 modifié #5
    Ok merci je vais voir ça.

    //
    Petite correction aussi sur ce que j'ai dit :

    <br />lengthCorrect = [NSString stringWithFormat:NSLocalizedString(@&quot;%0.1f%Ko/sec&quot;,nil),((float)length/1024)];
    
    (j'avais mis "%0.1fKo/sec" et aussi  "length/1024" alors que c'est "(float)length/1024")
    //

    Et tu as bien raison, en fait il fait cette opération en moins d'une seconde.. ça fait que en fait j'ai récupéré le débit de moins d'une seconde.. la preuve :
    2006-03-20 15:49:30.853 iFreete[719] 1.4Ko/sec
    2006-03-20 15:49:31.323 iFreete[719] 1.4Ko/sec
    2006-03-20 15:49:31.765 iFreete[719] 1.4Ko/sec
    2006-03-20 15:49:32.315 iFreete[719] 1.4Ko/sec
    2006-03-20 15:49:32.739 iFreete[719] 1.4Ko/sec
    2006-03-20 15:49:33.368 iFreete[719] 1.4Ko/sec
    2006-03-20 15:49:33.824 iFreete[719] 1.4Ko/sec
    2006-03-20 15:49:34.621 iFreete[719] 1.4Ko/sec
    2006-03-20 15:49:34.916 iFreete[719] 1.4Ko/sec

    Donc logiquement, je devrais avoir ENVIRON 2x1.4Ko / sec
  • AliGatorAliGator Membre, Modérateur
    07:44 modifié #6
    Oui mais il ne faut pas se baser sur le "environ" !!

    Pour avoir un vrai débit il faut diviser la quantité d'octets reçus par le temps depuis le début du téléchargement... Comme n'arrête pas de te dire LeChatNoir.

    Pourquoi tu t'entêtes à  ne pas vouloir intégrer cette date de début de téléchargement quelquepart ? Pour pouvoir faire le calcul ensuite, qui finalement n'est pas méchant ?
  • LeChatNoirLeChatNoir Membre, Modérateur
    07:44 modifié #7
    ouais à  la louche c'est ça.
    Il fonctionne par paquet de 1.4Ko.
    Et il t'en ramène 2 paquets par sec. environ (à  la louche).

    C'est pas super, même pour un modem 56 Ko (un 56 K devrait pouvoir monter à  7 Ko/sec à  peu près... au max).

    Mais peut être est ce le site en face qui n'est pas rapide...
  • mars 2006 modifié #8
    Nan mais attends Ali, j'ai jms dit que j'allais faire 2x1.4Ko ... J'ai juste fait le remarque que ce que dit leChatNoir est bien vrai car cette méthode est appelée 2 fois en 1 seconde donc le débit est logiquement divisé par environ 2.

    D'ailleurs je test je test...
  • 07:44 modifié #9
    Bon je vois pas du tout comment faire je me suis perdu complétement ds les calculs  :crackboom:- Help !  :why?:
  • 07:44 modifié #10
    Salut  :o
    Voilà  j'ai réussi :

    <br />- (void)download:(NSURLDownload *)download didReceiveDataOfLength:(unsigned)length<br />{<br />&nbsp; &nbsp; &nbsp; // object est un dictionnaire contenant les infos download<br />&nbsp; &nbsp; &nbsp; float bytesReceived;<br />&nbsp; &nbsp; &nbsp; NSURLResponse* _response;<br /><br />&nbsp; &nbsp; &nbsp; bytesReceived = [[object objectForKey:@&quot;bytesReceived&quot;] floatValue];<br />&nbsp; &nbsp; &nbsp; _response = [object objectForKey:@&quot;response&quot;];<br />&nbsp; &nbsp; &nbsp; long long expectedLength=[_response expectedContentLength];<br />&nbsp; &nbsp; &nbsp; bytesReceived=bytesReceived+length;<br /><br />&nbsp; &nbsp; &nbsp; NSString* _debit;<br />	NSDate*	_downloadLastDate;<br />	float _debitValue;<br />	float _timeInterval;<br />		<br />	if(![object objectForKey:@&quot;date&quot;])<br />		[object setObject:[NSDate date] forKey:@&quot;date&quot;];<br />		<br />	_downloadLastDate = [object objectForKey:@&quot;date&quot;];<br />	_timeInterval = [[NSDate date] timeIntervalSinceDate:_downloadLastDate];<br />	_debitValue = bytesReceived/_timeInterval;<br />	<br />	if(_debitValue&gt;=1024000)<br />			_debit = [NSString stringWithFormat:NSLocalizedString(@&quot;%0.1f%Mb/sec&quot;,nil),(_debitValue/1024000)];<br />		else<br />			_debit = [NSString stringWithFormat:NSLocalizedString(@&quot;%0.1f%Kb/sec&quot;,nil),(_debitValue/1024)];<br />}<br />
    
  • 07:44 modifié #11
    Petit détail: pour les Mbits/s, il faut diviser par 1024*1024=1048576 et non 1024000 (à  changer dans le if aussi).
  • 07:44 modifié #12
    Autant pour moi, j'avais fait ça pour récupérer la taille des downloads en plus mais comme le débit je l'ai "repris", j'avais laissé l'ancienne "faute" qui est le "1024000"

    Merci Renaud  :adios!:
Connectez-vous ou Inscrivez-vous pour répondre.