Necesito obtener datos continuamente de una base de datos MySQL que obtiene datos con una frecuencia de actualización de alrededor de 200 ms. Necesito actualizar continuamente el valor de los datos en el campo de texto del tablero. Mi tablero está construido en Django.
He leído mucho sobre Channels , pero todos los tutoriales son sobre aplicaciones de chat. Sé que necesito implementar WebSockets que básicamente tendrán una conexión abierta y obtendrán los datos. Con la aplicación de chat, tiene sentido, pero no he encontrado nada que hable sobre la base de datos MySQL .
También leí sobre mysql-events . Dado que los datos que ingresan a la tabla provienen de un sensor externo, no entiendo cómo puedo monitorear una tabla dentro de Django, es decir, cada vez que se agrega una nueva fila en la tabla, necesito que se inserte esa nueva en base a una columna valor.
¿Alguna idea sobre cómo hacerlo? He revisado muchos artículos y no pude encontrar algo específico para este requisito.
Otra forma de implementar esta función es crear un microservicio WebSocket independiente.
La arquitectura Monolyth no es lo que necesitas aquí. Cada WebSocket abrirá una conexión a Django (que estará detrás del proxy inverso y el servidor: NGINX y Gunicorn ej.). Si su cliente abre dos pestañas en el navegador, obtendrá 2 conexiones, etc.
Mi recomendación es modificar la pila tecnológica (sí, soy un gran admirador de Django, pero hay muchas soluciones geniales para construir WS):
Starlette listo para el marco de producción con WebSockets integrados: https://www.starlette.io/websockets/uvicorn.workers.UvicornWorker for Gunicorn para administrar su aplicación ASGI: esta es solo 1 línea de código, como gunicorn -w 4 -k uvicorn.workers.UvicornWorker --log-level warning example:appEntonces, sus modelos, plantillas, la vista será administrada por Django. Starlette administrará sus conexiones WebSocket de forma asincrónica nativa. Si está interesado en esa opción, puedo darle instrucciones detalladas.