¿Websocket vs rest API para datos en tiempo real?

Necesito acceder constantemente a un servidor para obtener datos en tiempo real de instrumentos financieros. El precio cambia constantemente, por lo que debo solicitar nuevos precios cada 0,5 segundos. Las API REST de los corredores me permiten hacer esto, sin embargo, he notado que hay bastante demora al conectar al servidor. Acabo de notar que también tienen API websocket sin embargo. Según lo que leí, ambos tienen algunas ventajas y desventajas. Pero para lo que quiero hacer y porque la velocidad es especialmente importante aquí, ¿qué tipo de API recomendaría? ¿Websocket es realmente más rápido?

¡Gracias!

Related of "¿Websocket vs rest API para datos en tiempo real?"

La operación más eficiente para lo que está describiendo sería utilizar una conexión webSocket entre el cliente y el servidor y hacer que el servidor envíe información actualizada sobre los precios directamente al cliente a través de webSocket SOLAMENTE cuando el precio cambie por una cantidad significativa o cuando alguna cantidad mínima Ha transcurrido el tiempo y el precio ha cambiado.

Esto podría ser mucho más eficiente que hacer que el cliente solicite constantemente nuevos cambios de precio y el momento en que la nueva información llega al cliente puede ser más oportuno.

Por lo tanto, si está interesado en la rapidez con la que la información sobre un nuevo nivel de precio llega al cliente, un webSocket puede hacerlo mucho más oportuno porque el servidor puede enviar la nueva información de precios directamente al cliente en el momento en que cambia. en el servidor Mientras que mediante una llamada REST, el cliente tiene que sondear en un intervalo de tiempo fijo y solo obtendrá datos nuevos en el punto de su intervalo de sondeo.

Un webSocket también puede ser más rápido y más fácil en su infraestructura de red simplemente porque se requieren menos operaciones de red para simplemente enviar un paquete a través de una conexión webSocket ya abierta en lugar de crear una nueva conexión para cada llamada REST / Ajax, enviar datos nuevos y luego cerrar la conexión . La gran diferencia / mejora que esto haga en su aplicación particular sería algo que tendría que medir para saber realmente.

Sin embargo, webSockets se diseñó para ayudar con su escenario específico en el que un cliente quiere saber (tan cerca del tiempo real como sea práctico) cuando algo cambia en el servidor, por lo que definitivamente creo que sería el patrón de diseño preferido para este tipo de servidor. utilizar.


Aquí hay una comparación de las operaciones de red involucradas en el envío de un cambio de precio a través de un webSocket ya abierto en lugar de hacer una llamada REST.

webSocket

  1. El servidor ve que un precio ha cambiado y de inmediato envía un mensaje a cada cliente.
  2. El cliente recibe el mensaje sobre nuevo precio.

Descanso / Ajax

  1. El cliente configura un intervalo de sondeo
  2. En el siguiente disparo del intervalo de sondeo, el cliente crea una conexión de socket al servidor
  3. El servidor recibe una solicitud para abrir un nuevo socket
  4. Cuando se realiza la conexión con el servidor, el cliente envía una solicitud de nueva información de precios al servidor
  5. El servidor recibe la solicitud de nueva información de precios y envía una respuesta con nuevos datos (si los hay).
  6. El cliente recibe nuevos datos de precios
  7. El cliente cierra el zócalo
  8. Servidor recibe cierre de socket

Como puede ver, hay mucho más en la llamada Resto / Ajax desde el punto de vista de una red porque se debe establecer una nueva conexión para cada nueva llamada, mientras que el WebSocket ya usa una llamada ya abierta. Además, en los casos de webSocket, el servidor simplemente envía al cliente nuevos datos cuando hay nuevos datos disponibles, el cliente no tiene que solicitarlos regularmente.

Si la información de precios no cambia muy a menudo, el escenario REST / Ajax también tendrá con frecuencia llamadas de “no hacer nada” donde el cliente solicita una actualización, pero no hay datos nuevos. El caso de webSocket nunca tiene ese caso inútil ya que el servidor simplemente envía datos nuevos cuando está disponible.