Como todos ya sabemos, AJAX es acrónimo de Asynchronous JavaScript And XML (JavaScript asíncrono y XML). Dicha asincronía consiste en la comunicación asincrona con el servidor en segundo plano. Pero esta comunicación tiene limitaciones en cuanto al numero de conexiones simultaneas.
En el caso de HTTP 1.1; por defecto los browsers limitan a dos conexiones simultaneas a un mismo servidor o proxy según recomendaciones de la especificación de HTTP 1.1 (RFC2616).
En el caso de HTTP 1.0, por defecto son cuatro conexiones.
Por lo tanto, cuando usamos las técnicas AJAX, estamos sujetos a estas limitaciones porque usamos como base el browser, no importando si usamos una librería que nos ayude a hacer peticiones tales como XMLHttpRequest, Ajax.NET, AjaxPro, etc. porque la limitante es el browser.
He leído en muchos blogs de personas que hablan de concurrencia y muestra ejemplos, pero ninguno de ellos contempla esta situación. ¿Será que hasta ahora muy poca gente se habrá dado cuenta de este problema?
En condiciones normales, al disparar varias Calls de forma asincrónica, se ejecutará las dos primeras y las restantes quedaran en standBy hasta que una de las dos finalice.
Veamos la siguiente imagen para explicarlo de una forma más gráfica.
Lamentablemente esto es así, pueden probarlo. Lo que no está claro, por que la especificación HTTP recomienda estas limitaciones, siendo que esto afecta toda la navegación, inclusive imagenes y demás elementos.
¿Entonces que podemos hacer para solucionar el problema de concurrencia cuando implementamos Ajax en nuestra aplicación Web?
Para dar solución al límite de request simultáneos desde un mismo cliente, optaremos entre dos soluciones poco felices;
- Modificar la registry del cliente.
- Podemos hacer invocaciones a diferentes servidores o mismo servidor con diferente DNS.
Modificar la registry en el cliente normalmente es una soluciones poco viables -valida para soluciones en Intranet o ambientes controlados-.
Para ello es necesario agregar los siguientes registros en la registry del cliente;
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
MaxConnectionsPerServer REG_DWORD (configuración predeterminada 2) Establece el número de solicitudes simultáneas en un Single servidor HTTP 1.1
Nota: Modificar el numero de solicitudes simultanea a un servidor impactará para todo el contenido navegado dentro del browser. Estos valores se contienen para un usuario concreto y no tendrán efecto en otros usuarios que inician una sesión en el equipo.
Por otra parte, la solución mas viable sería hostear las páginas que se consultarán de forma asincrónica en otro servidor, o en otro WebSite dentro del mismo server. Para ello debemos contar con varios DNS tipo A.
Es decir que con dos DNS tipo A, podemos hacer hasta cuatro invocaciones simultaneas de forma asincrónica (HTTP 1.1).
Aquí puedes descargar un ejemplo donde se hacen invocaciones asincrónicas utilizando XMLHttpRequest, donde podrás evaluar los tiempos de respuesta de cuatro Calls lanzados simultaneamente.
Implementando una de las dos soluciones anteriormente mencionadas, la ejecución de Calls será de la siguiente manera;
Autores: Sebastián Dopico, Diego Osores, Neri Custodio.
[http://support.microsoft.com/kb/183110]
[http://www.ajaxtoolbox.com/request/examples.php]
2 comentarios:
Comentaros como extra, que en Firefox se hace tocando las variables relacionadas con.
network.http.max*
Tampoco habéis tomado en cuenta que esto también puede ocurrir detrás de un proxy y que, son valores distintos los que hay que "tunear".
Saludos
es muy cierta tu observación
Publicar un comentario