WebSockets¶
Introducción¶
Los WebSockets son una tecnología que permite la comunicación bidireccional en tiempo real entre un cliente (como un navegador web) y un servidor. Esto se realiza a través de una única conexión de socket persistente, lo que reduce la latencia y mejora la eficiencia en aplicaciones que necesitan actualizaciones frecuentes, como chats en vivo, juegos en línea o paneles de control en tiempo real.
Cafeto utiliza los mismos WebSockets de Starlette para la comunicación en tiempo real y ofrece dos formas de implementarlo.
Método tradicional¶
Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
En este caso, se recibe la información como un JSON sin ser asignado a un DTO y la respuesta es un JSON con el formato:
JSON | |
---|---|
1 2 3 4 |
|
Método callback¶
Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Nota: Es importante notar que la respuesta no se debe hacer usando
ModelResponse
sinoModelWSResponse
. Por ahora, las respuestas como JSONResponse, PlainTextResponse y HTMLResponse no están disponibles con WebSockets.
También es posible hacerlo así:
Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
En este método, los mensajes llegan en un DTO, con todas las validaciones y características que los DTO implican en las acciones HTTP.
La respuesta también cambia, ya que los mensajes por WebSockets no tienen un statusCode
como las peticiones HTTP tradicionales. El mensaje que llega tendría el siguiente formato:
JSON | |
---|---|
1 2 3 4 5 6 7 |
|
Pero si las validaciones del DTO fallan, la respuesta podría ser:
JSON | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
De esta forma, se puede emular la respuesta de las peticiones HTTP.
Nota: Solo el callback
on_receive
es requerido;on_connect
yon_disconnect
son opcionales.