trabajo trabajar salir que puesto puedo por pasa para otro legalmente hacer estres dejo dejar como avisar abandonar .net javascript ajax notifications polling

.net - trabajar - ¿Cómo notificar a mi cliente JS sin sondeo?



que hacer para salir de un trabajo (6)

Contexto: desde mi interfaz de usuario web javascript, inicio una operación de larga duración (varios minutos) que se realiza en el servidor .NET2.0. La llamada vuelve inmediatamente con ID de operación mientras que la operación de larga ejecución se ejecuta en paralelo. Las operaciones no consumen mucha CPU, pero realizan llamadas de red lentas. Una vez que se completa la operación, quiero ver los resultados en la interfaz de usuario web.

Pregunta: ¿Cómo puedo notificar al cliente cuando el trabajo está terminado?

Opciones que he considerado:

Opción 1 : inicio la operación de larga ejecución asincrónicamente directamente desde JS y espero que el valor de retorno sea el resultado final en lugar de una ID de operación. Mi biblioteca AJAX se ocupa de todo, y la vida se ve muy fácil y ordenada. El problema es que en el lado del servidor, el hilo es un hilo de ThreadPool que ahora bloqueo durante varios minutos . No necesita demasiadas solicitudes paralelas de larga ejecución para hacer que ThreadPool se muera de hambre y hacer que todo el servidor se ponga de rodillas, incluso si hay suficiente potencia de procesamiento.

Opción 2 : con la ID de operación, empiezo a sondear el servidor si la operación se completa. Sin embargo, este es un ataque de denegación de servicio contra mi propio servidor. Además, debe haber una buena solución ajax. Este no es un problema único.


¿Qué tal si el iframe oculto (o pequeño) ejecuta el script de ejecución prolongada y hace que javascript verifique solo el contenido del iframe? por ejemplo, el script escribe ID en el iframe en su extremo.


El sondeo, si se realiza correctamente, no tendrá un efecto notable en la carga de su servidor. Debe personalizar el intervalo para cubrir mejor las características específicas de su trabajo de servidor, por ejemplo, no sondear el servidor durante al menos 2 minutos si sabe que la operación generalmente lleva más tiempo. Incluso después de eso, elige un intervalo lo suficientemente grande, por ejemplo, 10 segundos. El uso de una solicitud de servicio web o un controlador personalizado minimizará el tráfico y el tiempo de servidor necesarios para procesar la solicitud.


Su opción 2 es exactamente lo que hice antes. Use setTimeout para limitar su sondeo a cada 30 segundos más o menos.


Tal vez invertir ajax es útil si no tienes demasiados clientes concurrentes. Esto a veces se llama cometa.

Invertir Ajax se refiere a un patrón de diseño Ajax que utiliza conexiones HTTP de larga duración para permitir la comunicación de baja latencia entre un servidor web y un navegador. Básicamente es una forma de enviar datos del cliente al servidor y un mecanismo para volver a enviar los datos del servidor al navegador (lo que necesita).

http://en.wikipedia.org/wiki/Reverse_Ajax

Parece que podría satisfacer tus necesidades, acabo de usarlo y funcionó muy bien.


ICEfaces Framework proporciona una tecnología AJAX Push . Admiten procesamiento asíncrono escalable de solicitudes en varios servidores de aplicaciones como Jetty, Tomcat y Glassfish.

Si bien esto es todo lo de Java, podría ayudar a encontrar los términos de búsqueda correctos para google.


Eche un vistazo a WebSync , una implementación cometa para .NET. Debería ser exactamente lo que estás buscando.