我正在尝试制作一个向客户端显示实时更新数据的页面。该网站的其余部分是使用 Django 构建的,因此我尝试使用 Channels 来实现此目的。
我显示的数据保存在 JSON 文件和 MySQL 数据库中,以便在网站的其他部分进行进一步计算。理想情况下,我想在收到时向客户端显示收到的最新数据(即文件更新时)。
尽管据我了解 Channel 正是为此目的而构建的,但我在执行此操作时遇到了困难。
我尝试过从客户端发送多个带有延迟和循环的请求,但它要么(讽刺地)仅在刷新时更新,要么立即更新。然而,这些方法都不是由文件或数据库的更改触发的。
这是“有效”的代码,但并没有真正执行所需的操作。 (另外,不可否认,那里基本上什么都没有......)
# 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 used:
<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>
我非常高兴能提供一个文档链接来帮助我实现这样的目标,因为我整整一周都没有找到解决方案。