IIC2233 / Syllabus

149 stars 13 forks source link

Cómo pausar/reanudar/cancelar una descarga: servidor o cliente? #674

Open gracie-14 opened 5 days ago

gracie-14 commented 5 days ago

Prerrequisitos

(Marcar colocando una X entre los corchetes los ítems que ya hiciste, así: "[X]")

Duda

Hola!

Tengo una duda al intentar implementar los botones para pausar, reanudar, y cancelar una descarga. Cuando se pausa una descarga, ¿esto debe pausar el servidor en el acto de enviar los datos, o el cliente en el acto de recibir los datos? ¿O los dos?

Estaba pensando que sería importante que el servidor reciba un comando para pausar en el envío de datos, porque si solo hago pausa en el cliente, entonces el thread del servidor seguirá enviando datos aunque el cliente no los esté escuchando. En este caso, una vez reanudado de nuevo, ¿los recvs del cliente (si el protocolo está bien implementado) recibirían todos los bytes enviado por el servidor? ¿O desaparecerían si el cliente no estaba escuchando en el momento del envío?

Y si se debe pausar en el servidor, y no el cliente, ¿cómo se hace para que el hilo del cliente no escuche por ejemplo otra descarga o mensaje del servidor que fue enviado para otro hilo? (Aquí mi pregunta es parecida a #611 )

GonzaloMatus commented 5 days ago

Hola, la forma en que logres que se detenga la descarga y se reanude está a disposición tuya, pero la forma más correcta sería que el cliente envíe un mensaje al servidor para que pause el envío de datos. Para aclarar, el cliente debería poder descargar más de un archivo simultáneamente, así que pausar la descarga de uno, no debe afectar la descarga de otros. Para lograr esto utiliza los 64 bytes que tienes de Identificador del mensaje a modo que logres identificar a que archivo corresponde el contenido del chunk que recibiste.

Espero que haya logrado aclarar tu duda.

gracie-14 commented 5 days ago

Esto ayuda mucho! Muchas gracias!