小编Rox*_*erg的帖子

通过Django频道和Websockets将实时更新推送到客户端

我正在尝试创建一个向客户端显示实时更新数据的页面.该网站的其余部分是使用Django构建的,所以我正在尝试使用Channels.

我显示的数据保存在JSON文件和MySQL数据库中,以便在站点的其他部分进行进一步计算.理想情况下,我希望在收到客户端时显示收到的最新数据(即文件更新时).

即使我理解Channels是为此目的而构建的,但我很难做到这一点.

我已尝试从客户端发送多个请求,并在消费者中使用延迟和循环,但它(讽刺的是)只更新刷新或立即更新.但是,这些方法都不是由文件或数据库中的更改触发的.

这是"有效"的代码,但并不真正做到需要的代码.(不可否认,那里基本没有...)

# 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/$"),
]
Run Code Online (Sandbox Code Playgroud)

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; …
Run Code Online (Sandbox Code Playgroud)

javascript django channels python-2.7 django-channels

3
推荐指数
1
解决办法
3662
查看次数