Descargar 100 archivos simultaneamente...
Publicado: 19 Mar 2017, 22:11
¿Hay manera de descargar simultaneamente una gran cantidad de archivos (unos 100) de aprox 4096 bytes y que no tarde tanto tiempo?, he intentado descargarlos de manera "normal" (uno a la vez) pero el tiempo de descarga de unos 10 archivos no es muy corto. ya que el servidor no responde tan rapido, tambien he intentado descargarlos todos simultaneamente (como se muestra en el código) pensando que seria más rapido y si, en efecto es mucho más rapido y he podido descargar unos 50 archivos en apenas 25 segundos...
Sin embargo, como se daran cuenta estoy usando una pausa de 25 segundos al final del loop para darle tiempo a que todos los archivos se descarguen y como requiero optimizar al máximo el tiempo consumido desconozco como corroborar si los archivos ya se han descargado antes del tiempo previsto y no tener que depender de la suerte.
Otra duda que tengo es como ponerle un "timeout" a la descarga y que por ejemplo si un archivo sobrepasa cierto tiempo en poder conectar, omita este y continue con el resto, ya saben, por cuestiones de reducir los tiempos.
Espero me puedan orientar, quiza estoy usando un metodo incorrecto.
Sin embargo, como se daran cuenta estoy usando una pausa de 25 segundos al final del loop para darle tiempo a que todos los archivos se descarguen y como requiero optimizar al máximo el tiempo consumido desconozco como corroborar si los archivos ya se han descargado antes del tiempo previsto y no tener que depender de la suerte.
Otra duda que tengo es como ponerle un "timeout" a la descarga y que por ejemplo si un archivo sobrepasa cierto tiempo en poder conectar, omita este y continue con el resto, ya saben, por cuestiones de reducir los tiempos.
Espero me puedan orientar, quiza estoy usando un metodo incorrecto.
Código: Seleccionar todo
$canArray = IniReadSectionNames("C:\xampp\htdocs\iptv\canales.ini") ;;; Este ini contiene el listado de los 100 archivos cada uno contendra 3 distintos links por si uno falla
If Not @error Then
For $can = 1 To $canArray[0]
$urlArray = IniReadSection ("C:\xampp\htdocs\iptv\canales.ini", $canArray[$can] )
$url1 = IniRead ("C:\xampp\htdocs\iptv\canales.ini", $canArray[$can], "URL1", "")
ConsoleWrite ($url1 & @CRLF)
InetGet ($url1, "C:\xampp\htdocs\iptv\" & $canArray[$can] & "_tmp.m3u8", 1, 1)
Sleep(500)
Next
Sleep (25000) ;; Esta es la pausa, sin embargo esto no me es muy funcional..
EndIf