Estoy jugando con el uso de FTP para cargar periódicamente pequeños archivos de datos de un programa a un servidor. Los usuarios acceden a los datos desde una página web que lee los datos con la función javascript XMLHttpRequest. Todo parece funcionar, pero estoy luchando con algunos problemas causados por FTP y XMLHttpRequest que se interponen entre sí. La única idea que se me ocurre es reintentar las cargas fallidas y detectar XMLHttpRequests fallidas o aquellas que devuelven datos incompletos y volver a intentarlas.

Me gustaría usar algo simple como FTP, ya que los usuarios de la aplicación probablemente no podrán alojar servidores (probablemente estén detrás de enrutadores NAT y no tengan números de IP fijos) y no tengan acceso a ningún servidor externo sofisticado.

¿Alguien tiene alguna sugerencia?

1
Mike D 20 sep. 2011 a las 17:50

3 respuestas

La mejor respuesta

¿Qué sucede si evita problemas de bloqueo de archivos al cargar el archivo con un nombre temporal y luego renombrarlo?

Pseudocódigo:

FTPSend "c:\readme.txt" /as "readme.txt.tmp"
if error retry FTPSend
FTPRename "readme.txt.tmp" /as "readme.txt"
if error retry rename

Por supuesto, también querrá limitar la cantidad de tiempo que pasa reintentando una operación fallida para que no se bloquee en un bucle.

1
AlexPace 20 sep. 2011 a las 19:11

Deseche el FTP (no es compatible con NAT) y realice sus cargas a través de HTTP. Ya tiene un sistema en su lugar que puede manejar HTTP (ya que está utilizando XHR). Puede aceptar sobrecargas mediante una solicitud POST e incluir algunas comprobaciones de integridad antes de sobrescribir el contenido existente o anunciar contenido nuevo.

1
Quentin 20 sep. 2011 a las 13:54

Mi aplicación está destinada a personas que no tienen acceso a un servidor que puedan controlar. Es decir. Es probable que utilicen el espacio de archivos proporcionado por su ISP o algún sitio FTP gratuito. Por lo tanto, cualquier función de publicación http no funcionará.

Por lo tanto, estoy usando FTP con la sugerencia de cambio de nombre anterior.

1) elimine el archivo TEMP.htm si existe 2) cargue filr TEMP.htm 3) elimine el archivo de destino, vuelva a intentarlo varias veces 4) cambie el nombre de TEMP.htm al archivo de destino

Hay algún tiempo entre 3) y 4) cuando no hay un objetivo, por lo que las referencias web pueden fallar. La página que usa los archivos también tiene que volver a intentar el acceso.

0
Mike D 22 sep. 2011 a las 12:58