google-chrome websocket socket.io xmlhttprequest

google chrome - Cómo resolver el límite de conexión de Chrome 6 cuando se utiliza el sondeo xhr



google-chrome websocket (1)

Utilice un webSocket real, en lugar del sondeo XHR. Las conexiones webSocket no cuentan para el límite de conexión http al mismo origen.

Hay un límite global separado para la cantidad de conexiones webSocket que se pueden crear, pero es un número alto (200 en Firefox, no estoy seguro de qué es exactamente en Chrome).

Aquí hay algunas referencias sobre este tema:

Recientemente descubrí que Chrome parece tener un límite de conexión de 6 ( Chrome se bloquea después de que se transfiera cierta cantidad de datos - en espera del socket disponible ) desafortunadamente, descubrí esto de la manera más difícil al recibir un mensaje de "esperando por los sockets disponibles" después de cargarlo. demasiadas pestañas (7).

Sé que es Chrome, ya que otro usuario de Chrome (también conocido como otra sesión del navegador) carga la página web perfectamente bien en la misma computadora al mismo tiempo (tengo varios usuarios de Chrome abiertos en mi computadora). Así que no es el servidor de ninguna manera.

Creo que esto se debe a que, en socket.io (que estoy usando para notificaciones), soy xhr-polling, lo que hace que Chrome tenga que esperar hasta que pueda capturar un socket de una de esas conexiones antes de que pueda procesar la página.

¿Cuál es la solución a esto?

He pensado en un par de soluciones:

  • reduzca la ventana de sondeo xhr, esto aumenta las conexiones en el navegador y node.js, pero significará que la página no se detendrá.
  • Utilice websockets. No estoy seguro de si los websockets son inmunes a este problema tampoco.
  • Hacer conexiones inactivas en pestañas no enfocadas. Aunque parece que otros sitios no tienen que hacer eso ...
  • Utiliza algún tipo de conexión compartida. Teniendo en cuenta que Chrome aísla los websockets y las solicitudes xhr de la pestaña, me resulta difícil entender cómo funciona.

Como punto adicional: la razón por la que no he ido con los websockets desde el principio es porque uso cloudflare. Pero si esta es la manera de resolverlo entonces: así sea.