python - library - API websocket vs rest para datos en tiempo real?
websocket python javascript (1)
Necesito acceder constantemente a un servidor para obtener datos en tiempo real de los instrumentos financieros. El precio cambia constantemente, así que necesito solicitar nuevos precios cada 0,5 segundos. Las API REST de los intermediarios me permiten hacer esto, sin embargo, he notado que hay bastante retraso al conectarse al servidor. Sin embargo, me di cuenta de que también tienen API websocket. Según lo que leí, ambos tienen algunos pros / contras. Pero por 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!
La operación más eficiente para lo que está describiendo sería usar una conexión webSocket entre el cliente y el servidor y hacer que el servidor envíe información actualizada de precios directamente al cliente a través de webSocket SOLO cuando el precio cambie en una cantidad significativa o cuando una 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 precios y el momento en que la nueva información llegue al cliente puede ser más oportuno.
Entonces, si está interesado en la rapidez con la que la información sobre un nuevo nivel de precios llega al cliente, un webSocket puede llegar allí mucho más oportunamente 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 usando una llamada REST, el cliente tiene que sondear un intervalo de tiempo fijo y solo obtendrá nuevos datos en el punto de su intervalo de sondeo.
Un webSocket también puede ser más rápido y 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 nuevos datos y luego cerrar la conexión . Cuánta diferencia / mejora esto hace en su aplicación particular sería algo que tendría que medir para saber realmente.
Pero, los WebSockets fueron diseñados para ayudarlo 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 pensaría que sería el patrón de diseño preferido para este tipo de utilizar.
Aquí hay una comparación de las operaciones de red involucradas en el envío de un cambio de precio en un webSocket ya abierto en comparación con hacer una llamada REST.
webSocket
- El servidor ve que un precio ha cambiado e inmediatamente envía un mensaje a cada cliente.
- El cliente recibe el mensaje sobre el nuevo precio.
Descanso / Ajax
- El cliente configura un intervalo de sondeo
- En el siguiente disparo del intervalo de sondeo, el cliente crea una conexión de socket al servidor
- El servidor recibe una solicitud para abrir un nuevo socket
- Cuando se realiza la conexión con el servidor, el cliente envía una solicitud de nueva información de precios al servidor
- El servidor recibe una solicitud de nueva información de precios y envía una respuesta con nuevos datos (si los hay).
- El cliente recibe nuevos datos de precios
- El cliente cierra el zócalo
- El servidor recibe el zócalo cerca
Como puede ver, hay mucho más en la llamada Rest / Ajax desde el punto de vista de la red porque se debe establecer una nueva conexión para cada nueva llamada, mientras que webSocket 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á frecuentemente 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 derrochador ya que el servidor solo envía nuevos datos cuando está disponible.