José Víctor Zammit
Los websockets HTML5 son (y lo han sido durante algún tiempo) un tema candente ya que permiten elegantemente tiempo real empuje del lado del servidor.
Actualmente tengo una aplicación en funcionamiento con websockets impulsados por Tomcat 7.0.30 que incluye soporte websocket. Pero mover esto a un entorno de producción plantea preguntas.
Principalmente me gustaría saber el número máximo posible de conexiones que pueden operar (ser abierto) simultáneamente por sesión de navegación; a sesión de navegación implica una sola pestaña o ventana del navegador.
¿Las conexiones websocket abiertas suman la cantidad máxima de conexiones que el servidor web puede procesar simultáneamente? P.ej MaxClients
en apache.
Por el contrario, es el número máximo de websockets para un solo sesión de navegación limitado por el propio navegador? como esto entrada en el blog muestra, hasta abril de 2012, diferentes navegadores admiten cantidades variables de abierto conexiones websocket. (Yo personalmente apuntaría a 1 websocket abierto por sesión de navegación; pero esta información sería bueno saberla).
TL/RD:
- Qué limita la cantidad de posibles websockets por sesión de navegación? ¿Es el cliente? ¿El servidor? ¿O una combinación de ambos?
- ¿Se aplican las mismas limitaciones a ambos
ws:
ywss:
conexiones?
María
No hay una especificación estándar de max-conexiones valor predeterminado para navegadores. Depende de la implementación [0]. Además, usar más de un web-socket por sesión de navegación para la misma aplicación parece exagerado ya que puede usar canales pub/sub.
El cuello de botella para las conexiones suele estar en el lado del servidor. Web-socket es una actualización de HTTP, por lo que las conexiones son “solo” conexiones HTTP (TCP) actualizadas [1].HTTPS y WSS agregan solo una capa de seguridad a la conexión normal. No son una conexión diferente [2]. En tu caso revisa maxConexiones (y subprocesos máximos) [3] y los máximos de su sistema operativo [4][5]. Si sus conexiones simultáneas alcanzan decenas de miles, tal vez debería comenzar a pensar en el equilibrio de carga o la agrupación en clústeres. [6].
[0]https://code.google.com/p/chromium/issues/detail?id=85323
[1]http://en.wikipedia.org/wiki/WebSocket
[2]http://en.wikipedia.org/wiki/HTTP_Secure
[3]http://tomcat.apache.org/tomcat-7.0-doc/config/http.html
[6]http://tomcat.apache.org/tomcat-7.0-doc/config/cluster.html
Más sobre alta concurrencia: http://www.kegel.com/c10k.html
-
Técnicamente, WebSocket no es una ‘actualización’ de HTTP. Es un protocolo diferente que también transmite sobre TCP. Utiliza HTTP para el protocolo de enlace y para enviar un campo de encabezado de actualización para iniciar el cambio de protocolo.
– hacklikecrack
8 de abril de 2014 a las 8:39
-
@hacklikecrack Pero, lo negocia a través de HTTP, a un servidor HTTP, continúa fluyendo a través de dicho servidor HTTP como una solicitud HTTP y, en particular, se negocia con
Connection: Upgrade
como un encabezado HTTP. Tengo que ponerme del lado de @Mardie en esto;)– trevorj
8 de junio de 2018 a las 2:21
-
¿A qué se refiere la función de “canales pub/sub”?
– Glifo
7 junio 2019 a las 17:39
Estera
En Gecko 7 introdujeron el aprameter network.websocket.max-connections
puedes configurarlo about:config
. Está configurando las conexiones websocket máximas “a la vez” de acuerdo con esto:
https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API
No sé si puede determinar este número a partir del código y si hay alguna forma de determinar cuántos están abiertos en otras sesiones (cuántos le quedan).
-
Hmm, no parece haber una forma de navegador cruzado para configurar esto. Sigue siendo útil; +1ed.
– José Víctor Zammit
18 de septiembre de 2012 a las 11:05
-
No pude encontrar una opción similar en Chrome, pero esto fue útil para Firefox, ¡gracias!
– Brad
17 dic 2014 a las 15:25
-
Según la primera referencia en la respuesta más votada de Mardie, Chrome no proporciona esa configuración en tiempo de ejecución, @Brade. Tendría que compilar su propio Chromium personalizado para cambiar el límite.
– Palec
9 de abril de 2019 a las 6:30
-
Mi problema era desde el punto de vista del usuario: cuando tengo demasiadas pestañas abiertas con la interfaz web TFS cargada, todas comienzan a comportarse de manera extraña. Configuración más grande
network.http.max-persistent-connections-per-server
en FF’s about:config ayudó.– Palec
9 de abril de 2019 a las 6:44
Recomiendo encarecidamente mantener una sola conexión por sesión de navegación; lo último que desea es preocuparse por las limitaciones entre navegadores. Su servidor es donde realmente va a importar. Los servidores y firewalls solo pueden manejar tantas conexiones simultáneas. He visto proveedores de alojamiento habilitados para socket que basan sus precios en la cantidad de conexiones simultáneas, si eso le da una idea de dónde importa y cómo debe construir su aplicación (por ejemplo, una sola conexión por usuario).
– Ryan Ballena
9 de febrero de 2014 a las 23:53
Vale la pena leer. drewww.github.io/socket.io-benchmarking
– usuario1741851
11 de febrero de 2014 a las 7:12