@Roxerg: конечно, единственное требование - знать название группы, на которую вы хотите транслировать. Из любого места в вашем коде:

аюсь сделать страницу, которая показывает данные обновления в реальном времени для клиента. Остальная часть сайта построена с использованием Django, поэтому я пытаюсь использовать каналы для этого.

Данные, которые я показываю, сохраняются как в файле JSON, так и в базе данных MySQL для дальнейших расчетов в других частях сайта. Идеально,Я хотел бы отобразить последние полученные данные (то есть, когда файл обновляется) для клиента, как он получен.

И хотя я понимаю, что каналы созданы именно для этой цели, у меня возникают проблемы с этим.

Я попытался отправить несколько запросов со стороны клиента с задержкой и циклами в потребителе, но он либо (по иронии судьбы) обновляется только при обновлении, либо обновляется мгновенно. Однако ни один из этих подходов не инициируется изменением файла или базы данных.

Это код, который «работает», но на самом деле не выполняет то, что требуется. (также, по общему признанию, там в основном ничего нет ...)

# 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 использовал:

<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>

Я был бы очень доволен ссылкой на документы, которые помогли бы мне достичь чего-то подобного, так как мне не удавалось найти решение в течение целой недели.

Ответы на вопрос(1)

Ваш ответ на вопрос