Colección de citas famosas - Slogan de motivación - La tecnología “server push” del cometa

La tecnología “server push” del cometa

En las aplicaciones desarrolladas en base a esta arquitectura, el servidor enviará datos activamente al programa cliente de forma asincrónica sin que el cliente realice una solicitud explícita. La arquitectura Comet es muy adecuada para aplicaciones web basadas en eventos y aplicaciones que requieren una fuerte interactividad y rendimiento en tiempo real, como análisis de operaciones bursátiles, salas de chat y juegos en línea basados ​​en la web.

La tecnología Server Push (Server Push) es uno de los términos más populares en la tecnología web reciente y su alias es Comet. Es otra tecnología web popular después de AJAX. La tecnología de inserción de servidores y su reciente popularidad están estrechamente relacionadas con AJAX.

Con la popularidad de la tecnología Web, cada vez más aplicaciones se han transformado del modo C/S original al modo B/S, disfrutando de las diversas ventajas que ofrece la tecnología Web (como multiplataforma, libre de mantenimiento de clientes, a través de firewalls, buena escalabilidad, etc.). Pero las aplicaciones basadas en navegador también tienen sus defectos. Principalmente radica en la amabilidad e interactividad de la interfaz. Dado que la página del navegador debe actualizarse cada vez para obtener los datos más recientes del servidor o transmitir datos al servidor, la experiencia visual causada por el retraso es muy mala. Por lo tanto, muchas aplicaciones de escritorio abandonan la tecnología web para obtener una interfaz más amigable o utilizan tecnología de complemento del navegador (ActiveX, Applet, Flash, etc.). Sin embargo, la tecnología del complemento del navegador en sí tiene muchos problemas, como problemas multiplataforma y problemas de compatibilidad de la versión del complemento. Con el auge de la tecnología AJAX, los desarrolladores ven una vez más la oportunidad de utilizar navegadores para reemplazar las aplicaciones de escritorio, y esta oportunidad es muy grande. AJAX convierte la actualización de toda la página en una actualización parcial de la página y los datos se transmiten de forma asincrónica, lo que hace que desaparezca la diferencia visual causada por el retraso de la red. AJAX también utiliza DHTML y un rico lenguaje JavasScript para simular varios eventos y procesos de respuesta del sistema de escritorio, así como efectos suaves de desplazamiento y arrastre. No solo eso, algunos gigantes de TI (Google, Sun, Oracle, etc.) proporcionan un conjunto muy rico de herramientas de desarrollo AJAX, lo que hace que desarrollar y depurar aplicaciones AJAX sea fácil y eficiente, y las aplicaciones AJAX desarrolladas también pueden abarcar varios navegadores y Sistema operativo. En este caso, las aplicaciones web basadas en AJAX surgieron rápidamente, absorbiendo la parte del sistema de escritorio original. Las herramientas de chat, los lectores de correo electrónico, los editores de blogs e incluso el software de Office y el software de procesamiento de textos tienen una apariencia hermosa en el navegador e interfaces interactivas que son casi comparables a los sistemas de escritorio. Google incluso presentó el eslogan y la estrategia de "Con los navegadores y Google, no hay necesidad de Microsoft". En el mundo de Ajax, a excepción del software de diseño CAD tradicional y el software de juegos a gran escala, que son inseparables de los sistemas de escritorio debido a sus exigentes requisitos en cuanto al hardware del sistema, parece que todas las demás aplicaciones se pueden convertir en aplicaciones web.

Sin embargo, existe un fallo fatal en las aplicaciones AJAX de los navegadores que no pueden satisfacer las necesidades de los sistemas de escritorio tradicionales. Eso es "Entrega de mensajes iniciada por el servidor". En muchas aplicaciones, el software del servidor necesita enviar mensajes o información de forma activa a los clientes. Debido a que el servidor contiene los recursos principales del sistema, puede ser el primero en obtener cambios de estado del sistema y ocurrencia de eventos. Cuando se producen estos cambios, el servidor necesita enviar mensajes de forma proactiva al cliente en tiempo real. Por ejemplo, cambios en las acciones. En los sistemas de escritorio tradicionales, no hay ningún problema con este requisito, porque generalmente existe una conexión persistente entre el cliente y el servidor, y esta conexión puede pasar varios datos en ambas direcciones. Las aplicaciones web basadas en el protocolo HTTP no. Como se mencionó en el apartado anterior, en el mundo Web, el servidor siempre envía datos de forma pasiva, siempre que el cliente primero deba enviar una solicitud. En realidad, el navegador no sabe cuándo cambiará la información del servidor. Para simular la comunicación en tiempo real, o no quiere perderse cierta información, solo puede utilizar la tecnología de sondeo para actualizar continuamente la página y obtener los datos más recientes. (ver Figura 18-5). Este método no solo desperdicia recursos del servidor, sino que lo más importante es que hay un cierto retraso cada vez que se establece (o cierra) una nueva conexión HTTP. Este retraso hace que las aplicaciones con transferencia frecuente de información sean intolerables. Así nació la "tecnología de inserción de servidores". Como interfaz de las aplicaciones web, el navegador tiene capacidades de procesamiento limitadas. El desarrollo de navegadores requiere actualizaciones del software del cliente. Al mismo tiempo, la diversidad del software del navegador del cliente también afecta en cierto sentido la promoción de nuevas tecnologías de navegador. En las aplicaciones web, la tarea principal del navegador es enviar solicitudes, analizar la información devuelta por el servidor y mostrarla en diferentes estilos. AJAX es el resultado del desarrollo de la tecnología del navegador. Mejora la capacidad de respuesta de las operaciones de un solo usuario mediante el envío de solicitudes asincrónicas en el lado del navegador. Pero la Web es esencialmente un sistema multiusuario. Para cualquier usuario, el servidor puede considerarse como un usuario más. El desarrollo de la tecnología AJAX existente no puede resolver el problema de transmitir información actualizada al cliente en tiempo real en una aplicación web multiusuario, por lo que los usuarios pueden operar con información "obsoleta".

La aplicación de AJAX permite actualizar los datos en segundo plano con mayor frecuencia.

Figura 1. Comparación entre el modelo de aplicación web tradicional y el modelo basado en AJAX

El "Server Push" es una tecnología que existe desde hace mucho tiempo. se implementó principalmente a través del socket del cliente o la llamada remota del servidor. Debido a que el desarrollo de la tecnología de navegador es relativamente lento y no proporciona un buen soporte para la implementación de "server push", es difícil tener una solución completa para implementar "server push" y utilizarla en programas comerciales en aplicaciones puramente de navegador. En los últimos años, debido a la popularidad de la tecnología AJAX y al hecho de que incorporar IFrame en el componente ActiveX del "htmlfile" puede resolver los problemas de carga y visualización de IE, algunas aplicaciones populares como meebo y gmail+gtalk han utilizado estas nuevas tecnologías. en su implementación. Al mismo tiempo, el "server push" tiene muchas necesidades en aplicaciones reales. Por estas razones, la tecnología "server push" basada en navegadores puros ha comenzado a recibir más atención. Alex Russell (líder del proyecto Dojo Toolkit) la llama tecnología "server push" basada en conexiones HTTP largas y no requiere la instalación de complementos. ins en el lado del navegador para "Comet". Ya existen algunas aplicaciones Comet maduras y varios marcos de código abierto. Algunos servidores web como Jetty también han realizado muchas mejoras para admitir una gran cantidad de conexiones largas simultáneas. Para conocer el estado de desarrollo más reciente de la tecnología Comet, consulte la wiki sobre Comet.

A continuación se presentarán dos modelos de implementación de aplicaciones Comet.

Método de sondeo largo basado en AJAX

Como se muestra en la Figura 1, la aparición de AJAX permite a JavaScript llamar al objeto XMLHttpRequest para emitir solicitudes HTTP. Se basa en la función de procesamiento de respuesta de JavaScript. on La información devuelta por el servidor actualiza la visualización de la página HTML. La diferencia entre usar AJAX para implementar "server push" y las aplicaciones AJAX tradicionales es que:

El servidor bloqueará la solicitud hasta que se entreguen los datos o se agote el tiempo de espera antes de regresar.

La función de procesamiento de respuesta JavaScript del lado del cliente emitirá otra solicitud y restablecerá la conexión después de procesar la información devuelta por el servidor.

Cuando el cliente procesa los datos recibidos y restablece la conexión, es posible que lleguen nuevos datos al servidor; esta información será guardada por el servidor hasta que el cliente restablezca la conexión, y el cliente lo hará; guardar los datos actuales del servidor a la vez. Toda la información se recupera del terminal.

Figura 2. Modelo de inserción de servidor basado en sondeo largo

Algunas aplicaciones y ejemplos como “Meebo” y “Pushlet Chat” utilizan este método de sondeo largo. En comparación con "encuesta", este método de sondeo largo también se puede llamar "pull" (pull). Debido a que esta solución está basada en AJAX, tiene las siguientes ventajas: la solicitud se emite de forma asincrónica; no es necesario instalar complementos, tanto IE como Mozilla Firefox son compatibles con AJAX;

En este modo de sondeo largo, el cliente llama a la función de devolución de llamada para procesar la información cuando el estado listo de XMLHttpRequest es 4 (es decir, la transmisión de datos está completa). Cuando el estado listo es 4, la transferencia de datos se completa y la conexión se cierra. Mozilla Firefox brinda soporte para Streaming AJAX, es decir, cuando el estado de preparación es 3 (los datos aún se están transmitiendo), el cliente puede leer los datos, de modo que la información devuelta por el servidor se puede leer y procesar sin cerrar la conexión. Cuando readystate es 3, IE no puede leer los datos devueltos por el servidor. Actualmente, IE no admite AJAX basado en Streaming.

Método de transmisión basado en Iframe y archivo html

iframe es un tipo de etiqueta HTML que existe desde hace mucho tiempo. Incorpora un marco oculto en la página HTML y luego lo incrusta. El atributo SRC del marco oculto se establece en una solicitud de conexión larga y el servidor ingresará datos continuamente al cliente.

Figura 3. Modelo push de servidor basado en el método de transmisión

La solución AJAX mencionada en la sección anterior es procesar los datos recuperados del servidor mediante XMLHttpRequest en JavaScript, y luego JavaScript puede ser muy conveniente para controlar la visualización de páginas HTML.

La misma idea se utiliza en el lado del cliente de la solución iframe. El servidor iframe no devuelve los datos que se muestran directamente en la página, sino que devuelve una llamada a la función Javascript del cliente, como "js_func. ("datos del servidor")”. El lado del servidor pasa los datos devueltos como parámetros de la función JavaScript del cliente; el motor Javascript del navegador del cliente ejecutará el código cuando reciba la llamada JavaScript devuelta por el servidor.

Como se puede ver en la Figura 3, la conexión no se cerrará para cada transmisión de datos. La conexión solo se cerrará cuando ocurra un error de comunicación o cuando se restablezca la conexión (algunos firewalls a menudo están configurados para ello). descartar conexiones demasiado largas), el servidor puede establecer un período de tiempo de espera y, después del tiempo de espera, notificar al cliente para restablecer la conexión y cerrar la conexión original).

El uso de un iframe para solicitar una conexión larga tiene un inconveniente obvio: la barra de progreso en la parte inferior de IE y Morzilla Firefox mostrará que la carga no se ha completado, y el ícono sobre IE seguirá girando, indicando que la carga está en curso. Los genios de Google resolvieron el problema de carga de la pantalla en IE usando un ActiveX llamado "htmlfile" y usaron este método en el producto gmail+gtalk. Alex Russell describe este enfoque en el artículo "¿Qué más se esconde en las profundidades del sorprendente JavaScript de Google?" El comet-iframe.tar.gz proporcionado por el sitio web de Zeitoun encapsula un objeto cometa JavaScript basado en iframe y htmlfile. Es compatible con los navegadores IE y Mozilla Firefox y puede usarse como referencia.