Envíe actualizaciones en vivo al cliente a través de Django Channels y Websockets

Estoy tratando de hacer una página que muestre datos de actualización en vivo para el cliente. El resto del sitio está construido con Django, así que estoy tratando de usar canales para esto.

Los datos que estoy mostrando se guardan tanto en un archivo JSON como en una base de datos MySQL para realizar más cálculos en otras partes del sitio. Idealmente,Me gustaría mostrar los últimos datos recibidos (es decir, cuando el archivo se actualiza) al cliente a medida que se reciben.

Y aunque entiendo que los canales se crean exactamente para este propósito, tengo problemas para hacerlo.

He intentado enviar múltiples solicitudes desde el lado del cliente con demoras y bucles en el consumidor, pero (irónicamente) solo se actualiza al actualizar o se actualiza al instante. Sin embargo, ninguno de estos enfoques se desencadena por un cambio en el archivo o la base de datos.

Este es el código que "funciona", pero realmente no hace lo que se requiere. (también, es cierto, básicamente no hay nada allí ...)

# consumers.py
def ws_connect(message):
  message.reply_channel.send({"accept": True})

def ws_receive(message):

  with open("data.json") as jsonfile:
    jsondata = json.load(jsonfile)

  res = json.dumps(jsondata)
  message.reply_channel.send({ "text": res, })

#routing.py
from channels.routing import route
from .consumers import ws_receive, ws_connect


channel_routing = [
  route("websocket.receive", ws_receive, path=r"^/websockets/$"),
  route("websocket.connect", ws_connect, path=r"^/websockets/$"),
]

JS utilizado:

<script>
var wsurl = "ws://" + "mywebsite.com" + "/websockets/";
socket = new WebSocket(wsurl);

socket.onopen = function() {
     socket.send("this is a request");
     console.log('sent');
  }

socket.onmessage = function(message) {
    console.log(message.data);
    document.getElementById("livedata").innerHTML = message.data;
}
</script>

Estaría perfectamente feliz con un enlace a los documentos que me ayudaría a lograr algo como esto, ya que he logrado no encontrar la solución durante toda una semana.

Respuestas a la pregunta(1)

Su respuesta a la pregunta