2010-07-21 7 views
5

Disculpe el título algo confuso. No estoy seguro de cómo titular esto. Mi situación es esta: tengo una herramienta de simulación académica, que estoy en proceso de desarrollar un front-end web para. Mientras que el simulador basado en C++ es computacionalmente bastante eficiente (varias centésimas a un décimo de segundo de tiempo de ejecución) para sistemas pequeños, puede generar una cantidad significativa (en términos de aplicaciones web) de datos (~ 4-6mb).Cómo manejar grandes conjuntos de datos para la simulación del lado del servidor -> navegador del cliente

Actualmente la configuración es la siguiente manera-

  1. Usuario acceda archivo index.html. Esta página en el lado izquierdo tiene una forma interactiva donde el usuario puede ingresar parámetros de simulación. En el lado derecho hay una representación del sistema que están creando, junto con algunas pestañas en gris para varios gráficos de los datos de simulación.
  2. El usuario hace clic en "Ejecutar simulación". Esto envía los parámetros sim solicitados a un archivo runSimulation.php a través de una llamada AJAX. runSimulation.php crea un archivo de entrada basado en los datos enviados, luego ejecuta el simulador usando este archivo de entrada. El simulador arroja 4-6 mb de datos en varios archivos de salida.
  3. Una vez que la simulación se ejecuta, la respuesta al navegador es otra función de javascript que llama a un archivo returnData.php. Este script php empaqueta los datos en los archivos de salida como datos JSON, devuelve los datos JSON al navegador y luego elimina los archivos de datos.
  4. Estos datos de respuesta se envían a unos pocos objetos de trazado en el Javascript del navegador, y las pestañas de trazado se activan. El usuario puede abrir e interactuar con los datos trazados.

Esta configuración está funcionando bien, sin embargo estoy corriendo en dos cuestiones:

  • El retorno de datos es lenta 4-6mb de data que puede tomar un tiempo para cargar. (Esa información se está comprimiendo, lo que reduce su lado considerablemente, pero aún puede tomar más de 20 segundos en una conexión más lenta)
  • El siguiente objetivo es permitir al usuario trazar múltiples ejecuciones de simulación para que puedan comparar los resultados.

Mi idea es que podría querer mantener los archivos de datos en el servidor, mientras la sesión de los usuarios está activa. Esto permitiría la capacidad de cargar solo los datos de la trama que el usuario quiere ver (y tal vez cargar otros datos en segundo plano a medida que ven los resultados de la trama actual). Para las ejecuciones múltiples, puedo tener múltiples conjuntos de datos en el servidor, listos para que el usuario los descargue si/cuando los necesita.

Sin embargo, tengo un gran problema con esta línea de pensamiento: ¿cómo reconozco (en php) que el usuario ha abandonado el servidor y borro los datos? No quiero que los usuarios se hagan cargo del espacio de la unidad en la máquina. ¿Alguna idea sobre las mejores prácticas para este tipo de aplicación web?

Respuesta

1

Para el problema n. ° 1, realmente no tiene ninguna opción. Ya estás compilando los datos y usando JSON, que es un formato relativamente ligero. 4 ~ 6 MB de datos son de hecho mucho. Por cierto, si crees que PHP tarda demasiado en generar los datos, puedes usar tu programa C++ para generar los datos y publicarlos usando PHP. Puede usar exec() para hacer eso.

Sin embargo, no estoy seguro de cómo funcionan las simulaciones, pero JavaScript es un lenguaje Turing completo, por lo que posiblemente podría generar algún/más/todos estos datos en el lado del cliente (sea lo más lógico). En este caso, ahorraría mucho ancho de banda y disminuiría significativamente los tiempos de carga, pero tenga en cuenta que JS puede ser muy lento.

Para el problema n.º 2, si deja datos en el servidor necesitará realizar un seguimiento de las sesiones activas (es decir: cuándo fue la última vez que el usuario interactuó con el servidor) y establecer un tiempo de espera que tenga sentido su aplicación. Después del tiempo de espera, puede eliminar los datos.

Para realizar un seguimiento de la interacción, puede utilizar JS para comprobar si un usuario está activo (enviando heartbeats o algo así).

Cuestiones relacionadas