Hola RePy

Los web sockets, no son buenos para enviar archivos, es mejor para
notificar, por ejemplo, lo que puedes hacer es exponer el archivo mediante
una url y enviar la dirección en un mensaje de web socket, para que el
cliente abra (o descargue) el archivo.



[image: Mailtrack]
<https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&;>
Remitente
notificado con
Mailtrack
<https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&;>
22/04/19
11:27:22

El dom., 21 de abr. de 2019 a la(s) 19:50, PeRy (pery...@gmail.com)
escribió:

>
> Buenas! Estoy aprendiendo Python y estoy con el tema de los sockets, he
> creado un servidor y cliente para enviar archivos. Me he dado cuenta que en
> archivos grandes cuanto mas pasa el tiempo mas lenta se hace la recepción
> de la información, ¿alguna sugerencia por qué pasa y como se podría evitar?
> mi codigo:
>
> server:
>
> =============================================================================================
> elif b'\F' in data: # peticion de archivo para ser descargado
> transmitido = data.rstrip(b'\F')
> comparte_dir = os.path.join(os.getcwd(), 'compartir')
> print(os.path.join(comparte_dir, transmitido.decode()))
> filesize = os.path.getsize(os.path.join(comparte_dir,
> transmitido.decode()))
> print("TAMAÑO: {}".format(filesize))
> with open(os.path.join(comparte_dir, transmitido.decode()), 'rb') as f:
> self.socket.send(struct.pack('!I', filesize))  # enviamos en los primeros
> 4bytes el tamaño del archivo
> numero_bytes = self.socket.sendfile(f)
>                                         # data = f.read(8192)
> # numero_bytes = len(data)
> # self.socket.send(data)
> # while data:
> # data = f.read(8192)
> # self.socket.send(data)
> # numero_bytes += len(data)
>                                 print(numero_bytes)
>
> cliente:
>
> ===============================================================================================
> with open(archivo, 'wb') as f:
>                         buf = socket_cliente.recv(4)  # cabecera con elt
> amaño del archivo
>                         filesize = struct.unpack('!I', buf)
>                         print("filesize : {}".format(filesize))
>                         filesize=filesize[0]
>                         buf = b''
>                         tiempo_inicio = datetime.datetime.now()
>                         print(tiempo_inicio.strftime('%H:%M:%S'))
>                         while len(buf) < filesize:
>                             to_read = filesize - len(buf)
>                             buf += socket_cliente.recv(262144 if to_read >
> 262144 else to_read)  #8192 1024*8 o 4096 1024*4
>                             updt(filesize, len(buf))  # barra de progreso
>                         f.write(buf)
>
> ---------------------
> Muchas Gracias y un saludo
>
> _______________________________________________
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
  *Diego Alonso Uribe Gamez*
------------------------------

*Desarrollador web*

Twitter: @DiegoUG <http://www.twitter.com/DiegoUG>

Google+: +DiegoAlonsoUribeGamez
<https://plus.google.com/+DiegoAlonsoUribeGamez>
------------------------------
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

Responder a