websockets socket resource consumption http websocket

http - resource - websocket vs rest



¿Cuál es la diferencia de comportamiento entre HTTP Stay-Alive y Websockets? (3)

Debe leer sobre COMET , un patrón de diseño que muestra los límites de HTTP Keep-Alive. Keep-Alive tiene más de 12 años, por lo que no es una característica nueva de HTTP. El problema es que no es suficiente; El cliente y el servidor no pueden comunicarse de una manera verdaderamente asíncrona. El cliente siempre debe usar una solicitud "colgada" para recibir un mensaje del servidor; el servidor no puede simplemente enviar un mensaje al cliente en el momento que lo desee.

He estado trabajando con websockets últimamente en detalle. Creé mi propio servidor y hay una demo pública . No tengo experiencia o conocimiento tan detallado en relación a: http. (Aunque desde que las solicitudes de websocket se actualizan las solicitudes de http, tengo algunas).

En mi extremo, el servidor informa los detalles de cada golpe. Entre ellos hay un montón de solicitudes de http-live stay. Mi servidor no los maneja porque no son solicitudes websocket. Pero me despertó la curiosidad.

Todo lo importante de los websockets es que la conexión se mantiene viva. Luego puedes pasar mensajes en ambas direcciones (simultáneamente par). He leído que la conexión HTTP Stay-Alive es un desarrollo relativamente nuevo (no sé cuántos años pasé en el tiempo de las personas, solo que solo está incluido en el último estándar - 1.1 - ¿es eso realmente antiguo ahora?)

¿Supongo que puedo asumir que hay una diferencia de comportamiento entre los dos o que no habría ninguna razón para un estándar websocket? ¿Cual es la diferencia?


Un encabezado HTTP Keep Alive desde HTTP 1.0, que se utiliza para indicar que un cliente HTTP desea mantener una conexión persistente con el servidor HTTP. El principal objetivo es eliminar la necesidad de abrir una conexión TCP para cada solicitud HTTP. Sin embargo, aunque hay una conexión persistente abierta, el protocolo para la comunicación entre el cliente y el servidor sigue el patrón básico de solicitud / respuesta HTTP. En otras palabras, el lado del servidor no puede enviar datos al cliente.

WebSocket es un mecanismo completamente diferente, que se utiliza para configurar una conexión persistente y dúplex. Con esta conexión dúplex, el lado del servidor puede enviar datos al cliente y se debe esperar que el cliente procese los datos del lado del servidor en cualquier momento.

Citando las entradas correspondientes en Wikipedia para referencia: 1) http://en.wikipedia.org/wiki/HTTP_persistent_connection 2) http://en.wikipedia.org/wiki/WebSocket


HTTP vs websockets

REST (HTTP)

  • Los recursos se benefician del almacenamiento en caché cuando la representación de un recurso cambia raramente o se espera que múltiples clientes recuperen el recurso.
  • Los métodos HTTP tienen propiedades de idempotencia y seguridad bien conocidas. Una solicitud es "idempotente" si puede emitirse varias veces sin obtener resultados únicos.
  • El diseño HTTP permite respuestas para describir errores con la solicitud, con el recurso, o para proporcionar información de estado matizada para diferenciar entre escenarios de éxito.
  • Tener funcionalidad de solicitud y respuesta.
  • HTTP v1.1 puede permitir que múltiples solicitudes reutilicen una sola conexión, generalmente habrá pequeños periodos de tiempo de espera destinados a controlar el consumo de recursos.

Es posible que esté utilizando HTTP incorrectamente si ...

  • Su diseño se basa en que un cliente sondea el servicio a menudo, sin que el usuario actúe.
  • Su diseño requiere llamadas de servicio frecuentes para enviar mensajes pequeños.
  • El cliente debe reaccionar rápidamente a un cambio en un recurso, y no puede predecir cuándo ocurrirá el cambio.
  • El diseño resultante tiene un costo prohibitivo. Pregúntese: ¿Es una solución WebSocket sustancialmente menos esfuerzo para diseñar, implementar, probar y operar?

Websockets

  • El diseño de WebSocket no permite proxies explícitos o transparentes para almacenar mensajes en caché, lo que puede degradar el rendimiento del cliente.
  • El protocolo WebSocket ofrece soporte solo para situaciones de error que afectan el establecimiento de la conexión. Una vez que se establece la conexión y se intercambian los mensajes, se debe abordar cualquier escenario de error adicional en el diseño de la capa de mensajería, pero WebSockets permite una mayor eficiencia en comparación con REST porque no requieren la sobrecarga de solicitud / respuesta HTTP para cada mensaje enviado y recibido.
  • Cuando un cliente necesita reaccionar rápidamente a un cambio (especialmente uno que no puede predecir), un WebSocket puede ser el mejor.
  • Esto hace que el protocolo sea adecuado para los escenarios de mensajería "disparar y olvidar" y es poco adecuado para los requisitos transaccionales.
  • Los WebSockets fueron diseñados específicamente para escenarios de conexión de larga duración, evitan la sobrecarga de establecer conexiones y enviar encabezados de solicitud / respuesta HTTP, lo que resulta en un aumento significativo del rendimiento

Es posible que esté utilizando WebSockets incorrectamente si ...

  • La conexión se usa solo para un número muy pequeño de eventos, o una cantidad muy pequeña de tiempo, y el cliente no necesita reaccionar rápidamente a los eventos.
  • Su función requiere que múltiples WebSockets estén abiertos al mismo servicio a la vez.
  • Su función abre un WebSocket, envía mensajes, luego los cierra y luego repite el proceso más tarde.
  • Estás reimplementando un patrón de solicitud / respuesta dentro de la capa de mensajería.
  • El diseño resultante tiene un costo prohibitivo. Pregúntese: ¿Es una solución HTTP mucho menos esfuerzo para diseñar, implementar, probar y operar?

Ref: https://blogs.windows.com/buildingapps/2016/03/14/when-to-use-a-http-call-instead-of-a-websocket-or-http-2-0/