gpt4 book ai didi

javascript - 通过 Django Channels 和 Websockets 向客户端推送实时更新

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:58:56 25 4
gpt4 key购买 nike

我正在尝试制作一个向客户端显示实时更新数据的页面。该站点的其余部分是使用 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:

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

如果我有一个指向可以帮助我实现类似目标的文档的链接,我会非常高兴,因为我已经整整一周都没有找到解决方案。

最佳答案

将用户添加到 ws_connect 上的 django channel 组

from channels.auth import channel_session_user_from_http
from channels import Group

@channel_session_user_from_http
def ws_connect(message, **kwargs):
http_user = message.user
if not http_user.is_anonymous:
message.reply_channel.send({'accept': True})
Group('user-'+str(http_user.id)).add(message.reply_channel)`

通过

向用户发送任何新的更新数据
Group('user-1').send({'text': 'hello user 1'})
Group('user-2').send({'text': 'hello user 2'})

关于javascript - 通过 Django Channels 和 Websockets 向客户端推送实时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46287849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com