Streaming de Eventos en Tiempo Real con FastAPI

Streaming de Eventos en Tiempo Real con FastAPI

Introducción

FastAPI es un framework web moderno para Python que se basa en el paradigma de programación REST. Es conocido por su rendimiento, su facilidad de uso y su flexibilidad.

En este tutorial, aprenderemos a implementar un servicio de streaming de eventos en tiempo real con FastAPI.

¿Qué es el streaming de eventos?

El streaming de eventos es una técnica que permite enviar datos de forma continua a los clientes. Esto es útil para aplicaciones que necesitan mostrar datos que se actualizan constantemente, como datos de mercado bursátil o datos meteorológicos.

¿Cómo funciona el streaming de eventos con FastAPI?

FastAPI proporciona un módulo llamado fastapi.WebSockets que permite implementar servicios de streaming de eventos.

Para implementar un servicio de streaming de eventos, debemos crear una clase que herede de WebSocket. Esta clase debe definir un método on_connect() que se ejecutará cuando un cliente se conecte al socket web.

En el método on_connect(), podemos enviar un evento al cliente. Para ello, debemos llamar al método send() de la clase WebSocket.

El cliente recibirá el evento en su método on_receive().

Ejemplo

En el siguiente ejemplo, implementamos un servicio de streaming de eventos que envía el estado actual del tiempo.

Python
import fastapi
import uvicorn

from fastapi.websockets import WebSocket


class WeatherSocket(WebSocket):

    def on_connect(self):
        self.send("Bienvenido al servicio de streaming de eventos del tiempo")

    def on_receive(self, data):
        print("Recibido mensaje del cliente:", data)

        weather_data = {
            "temperatura": 25,
            "humedad": 50,
            "viento": 10 km/h,
        }

        self.send(weather_data)


app = fastapi.FastAPI()

app.add_websocket_route("/ws/weather", WeatherSocket)


if __name__ == "__main__":
    uvicorn.run(app, host="localhost", port=8000)

Para ejecutar este ejemplo, podemos usar el siguiente comando:

uvicorn main:app --reload

Una vez que el servidor esté en funcionamiento, podemos conectarnos al socket web usando un cliente web como SocketIO: https://socket.io/.

JavaScript
// Conectarse al socket web
const socket = io("http://localhost:8000/ws/weather");

// Escuchar los eventos
socket.on("weather", (data) => {
    console.log("Recibido evento del tiempo:", data);
});

Cuando nos conectemos al socket web, recibiremos el siguiente mensaje:

Bienvenido al servicio de streaming de eventos del tiempo

A continuación, el cliente recibirá eventos con el estado actual del tiempo.

{
    "temperatura": 25,
    "humedad": 50,
    "viento": 10 km/h,
}

Conclusión

En este tutorial, aprendimos a implementar un servicio de streaming de eventos en tiempo real con FastAPI.

FastAPI proporciona un módulo sencillo y eficaz para implementar este tipo de servicios.