Pregunta

Mi aún por ser liberado La aplicación Delphi 2010 permite a los usuarios cargar sus archivos en mis servidores.Ahora mismo estoy usando HTTPS POST para enviar los archivos, el algoritmo (simplificado) es básicamente:

  1. Dividir el archivo en "porciones" (256 KB cada una)
  2. Para cada segmento, PUBLICARLO en el servidor

es decir.para un archivo de 1 MB:

--> Get Slice #1 (256KB)
--> Upload Slice #1 using TidHTTP.Post()

--> Get Slice #2 (256KB)
--> Upload Slice #2 using TidHTTP.Post()

--> Get Slice #3 (256KB)
--> Upload Slice #3 using TidHTTP.Post()

--> Get Slice #4 (256KB)
--> Upload Slice #4 using TidHTTP.Post()

Estoy usando India 10.Usé (ab) mi generador de perfiles una y otra vez y no queda mucho por optimizar excepto cambiar la rutina de carga en sí.

yo también estoy usando subprocesos múltiples, y aunque hice lo mejor que pude para optimizar mi código, mis puntos de referencia todavía me dicen que puedo hacerlo mejor (hay otro software bien optimizado que logra un mucho mejor sincronización... ¡casi el doble de rápido que mi rutina de carga!)

Sé que no es culpa de mi servidor... aquí están las ideas que todavía necesito explorar:

  1. Intenté agrupar sectores en una sola POST; naturalmente, esto resultó en un aumento del rendimiento (20-35%), pero la capacidad de reanudación ahora se reduce.

  2. También pensé en usar SFTP/SSH, pero no estoy seguro de si es rápido.

  3. Utilice sockets web para implementar la carga reanudable (como este componente), tampoco estoy seguro de la velocidad.

Ahora mi pregunta es:¿Hay algo que pueda hacer para acelerar mi carga?estoy abierto a cualquier sugerencia que puedo implementar, incluidas herramientas de línea de comandos (si la licencia me permite incluirlas con mi aplicación), siempre que:

  1. Se admite la carga reanudable
  2. ¡Rápido!
  3. Uso razonable de la memoria
  4. Proteger y permitir inicio de sesión/autenticación de usuario

Además, debido a importantes preocupaciones de seguridad, FTP no es algo que me gustaría implementar.

¡Muchas gracias!

¿Fue útil?

Solución

Yo sugeriría hacer un solo TIdHTTP.Post() para todo el archivo sin fragmentarlo en absoluto.Puedes usar el TIdHTTP.OnWork... eventos para realizar un seguimiento de cuántos bytes se enviaron al servidor para que sepa desde dónde continuar si es necesario.Al reanudar, puede utilizar el TIdHTTP.Request.CustomHeaders propiedad para incluir un encabezado personalizado que le indique al servidor desde dónde está reanudando, para que pueda revertir su archivo anterior al desplazamiento especificado antes de aceptar los nuevos datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top