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

2024-04-08

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

我非常高兴能提供一个文档链接来帮助我实现这样的目标,因为我整整一周都没有找到解决方案。


将用户添加到 ws_connect 上的 django 通道组

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'})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 Django Channels 和 Websockets 将实时更新推送到客户端 的相关文章

  • 如何在 google.maps.event.addListener 中使用它

    以下示例有效 但是当我尝试传递参数并使用this在该功能不起作用 Working google maps event addListener markers i click showInfoWindow function showInfoW
  • 如何将“X-Content-Type-Options: nosniff”添加到我的网络服务器的所有响应标头中

    我正在运行一个 apache 网络服务器 我想将 X Content Type Options nosniff 添加到来自我的网络服务器的所有响应标头 我怎样才能做到这一点 是否可以通过更改 apache 配置文件来实现此目的 确保 mod
  • Dialogflow Fulfillment Webhook 调用失败

    I am new to dialogflow fulfillment and I am trying to retrieve news from news API based on user questions I followed doc
  • fadeOut() 和slideUp() 同时进行?

    我已经发现jQuery 淡出然后滑动 https stackoverflow com questions 734554 jquery fadeout then slideup这很好 但不是那个 我怎么能够fadeOut and slideU
  • 冒泡可用于图像加载事件吗?

    我可以用吗 window addEventListner 某种程度上来说 我所有的图像都有一个display none 图像加载后 我想设置display inline 这样我就可以规范下载图像时显示的内容 在这种情况下 我无法预加载图像
  • 使用标签或 href 传递 Django 数据

    我有一个包含链接的表 当单击该链接进行更多操作时 我想将一些数据传递给我的函数 my html table tbody for query in queries tr td value a href internal my func que
  • 非法使用break语句; javascript

    当这个变量达到一定数量时 我希望循环停止 但我不断收到错误 未捕获的语法错误 非法的中断语句 function loop if isPlaying jet1 draw drawAllEnemies requestAnimFrame loop
  • 如何在具有相同值的下拉菜单上触发 jQuery 更改事件

    即使用户选择相同的值 如何每次都触发 jQuery 更改事件 我需要刷新效果 例如如果用户选择Lawyer它会发出警报hello然后用户再次选择Lawyer从下拉菜单中 它应该发出警报hello 我怎样才能实现它 以下是代码 jQuery
  • 如何按 Angular 表中的属性(该属性具有单个 rownspan)进行分组?

    我没有找到这个问题的合适标题 我的问题是 例如 我有一个包含两列的表 列汽车品牌和列汽车型号 我希望表是 like in this picture 换句话说 品牌名称只会出现 1 次 我的输入数组采用以下 json 格式 brand Aud
  • JSONP 使用 JQuery 从 HTTPS 协议获取 JSON

    我正在尝试获取从 https 安全站点发送的 JSON 客户端希望不要使用任何服务器端语言 全部都是 Javascript 我读到 当使用 Jquery 中的 ajax 函数时 我必须使用 JSONP 才能从安全站点加载 JSON 我的第一
  • 使 Django 内置 send_mail 函数默认使用 html

    我想替换内置发送邮件功能 仅适用于纯文本电子邮件 用我自己的智能发送邮件函数 自动生成 html 和纯文本版本 一切都按我自己的电子邮件的预期进行 在我自己的应用程序中定义 我可以在views py中以这种方式做到这一点 from djan
  • 嵌套 DIV 的类似斑马的 CSS 样式

    我嵌套了 DIV 元素 但我不知道嵌套的级别 我需要每个都有与其父级不同的背景 创建类似斑马的颜色 我只使用两种背景 深色和白色 效果需要类似于在容器中设置奇数和偶数子级的样式 但在我的例子中 子级是嵌套的 我可以使用每个嵌套元素的规则来做
  • 检索 geodjango 多边形对象的边界框

    如何在 geodjango 中获取 MultiPolygon 对象的边界框 在 API 中找不到任何内容http geodjango org docs geos html http geodjango org docs geos html
  • Python守护进程:保持日志记录

    我有一个将一些数据记录到磁盘的脚本 logging basicConfig filename davis debug log level logging DEBUG logging basicConfig filename davis er
  • 无法创建超级用户 Django

    我假设这是因为我的超级用户依赖于还没有现有数据的 UserProfile 我的模型看起来像 from django db import models from django contrib auth models import User f
  • 绘制多边形

    我正在使用 Google Maps API V3 根据路径绘制多边形 该路径是随机未排序坐标点 LatLng 的数组 这会产生以下形状 Polylines intersect Problem 由于多边形的形状取决于路径中点的顺序 因此如何对
  • Heroku 与 django 通道的正确 procfile/要求是什么?

    tl dr django 频道应用程序在本地使用 manage py runserver 运行 但不在 heroku 上运行 我是 django 通道的新手 尝试使用 heroku 通道部署一个非常基本的 django 应用程序 我最初使用
  • django jet 中的自定义徽标

    我目前正在尝试对 django 管理面板的皮肤进行一些定制 以使其更符合我们的品牌 目前我们使用 django jet 来美化管理面板 django jet 可以自定义 css html 吗 所有评论都说我应该更改一些 html 文件 但我
  • 使圆圈与 d3.js 上的多线匹配相同的颜色过滤?

    我有一个多线图 当按每种水果过滤时会更新 每条线条颜色对应不同的销售年份 在 的帮助下Shashank https stackoverflow com users 5569282 shashank 每个数据点线上的圆圈已添加到组中 而不是直
  • Chrome 调试器注入 javascript

    我有这样的好奇心 是否可以以某种方式在我的页面中注入 javascript 并执行它并调试它 正如您在控制台中所做的那样 但在控制台中您无法暂停并观察变量 是否可以调试我通过控制台输入的代码 为什么无法调试通过 XHR 接收的代码 Than

随机推荐

  • Android Chromium WebView 崩溃

    我有一个在 Android 5 1 1 设备上运行的应用程序 该应用程序有一个 webview 48 0 2564 106 该视图保持 24 7 有时应用程序会崩溃 因为 chromium webview 有未捕获的异常 最新版本的webv
  • 如何将元素推入数组的某个值之后[重复]

    这个问题在这里已经有答案了 所以我们都知道array push工作原理如下 所以结果是 Array 0 gt red 1 gt green 2 gt blue 3 gt yellow 但现在我需要知道如何附加blue and yellow在
  • 涉及伪类first-child和dropcap的CSS选择器

    我需要格式化类似于下面的 HTML 基本上一个报价是optional 我需要将正文段落的第一个字母大写
  • 将应用程序背景设置为与主屏幕壁纸相同

    我想将应用程序的背景设置为与主屏幕壁纸相同 如何获取activity xml中的主屏幕壁纸 我可以这样做吗 Use final WallpaperManager wallpaperManager WallpaperManager getIn
  • 如何在scala中使用java代理

    我有一个 Iface 接口 它有两个用 java 编写的方法 该接口是 Zzz 类的内部接口 我已经用 scala 编写了调用处理程序 然后我尝试在 scala 中创建一个新的代理实例 如下所示 val handler new ProxyI
  • 元素不会出现在 IE7 中,直到我通过开发人员工具栏编辑它

    这个让我难住了 我的页面上有一个具有绝对位置的元素 位于具有相对位置的容器内 在除 IE7 之外的所有浏览器中 它都显示在正确的位置 没有任何问题 在 IE7 中 该元素不会出现 直到我添加或编辑其任何 CSS 属性在开发者工具栏的 属性
  • 在 javascript 中解析 JSON 以获得多个 JSON 对象 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 应该是一个很常见的答案 但我还没有找到 使用客户端 JavaScript 我的客户端收到一些 JSON 字符串 response id1 v
  • 重新排列数组索引 Eloquent Laravel

    从 laravel eloquent 数组中删除元素后出现错误 物业有房间 foreach property gt rooms as key gt room if room gt type 1 and type 1 and room gt
  • Jquery 验证 - 在急切验证期间显示验证摘要?

    是否可以使用 jquery 验证来显示验证摘要 我正在使用 MVC 3 如果重要的话 并且当每个元素失去焦点时我的表单会进行验证 myform validate onfocusout function element element val
  • Google 负载均衡器 www 到非 www 重定向

    我在使用 google 负载均衡器进行 www 到非 www 重定向时遇到一些困难 目前我的 HTTP gt https 工作没有问题 但是 我还没有真正看到任何关于其工作原理的最新文档 我的负载均衡器设置可以运行 App Engine A
  • Pharo Smalltalk 中的 For 循环 for 数组

    我正在尝试创建一个包含随机数 仅 0 或 1 的数组 但是当我运行它时 它只打印以下内容 遇到语句列表结尾 gt 这是我的代码 GenList lista lista Array new 31 1 to 30 do i lista at i
  • 导入pygame失败

    我已经从这里安装了 python 2 6 6 和 pygame 2 6 http pygame org ftp pygame 1 9 1 win32 py2 6 msi http pygame org ftp pygame 1 9 1 wi
  • 如何统一使用两个 Vector3 点创建一条线?

    我知道存在一些函数 如 lineRenderer 等 但我想使用两个点 以 Vector3 形式 在场景中创建一条直线 我不想使用任何键或使用鼠标来绘制线条 我只想在触发某些事件时或单击播放按钮后看到场景中的线条 谁能帮我 For crea
  • 如何设置 TabControls TabItem 标题 FontSize

    我有一个 TabControl 其样式可以更改 TabItem 标题的 FontSize 当我数据绑定 ItemsSource 时 只有标题受 FontSize 影响 但是 当我在另一个 TabControl 上使用相同的样式并在 XAML
  • Terraform 的 for_each 中的迭代器功能是什么?

    我正在尝试理解iterator的特点是for each在 Terraform 0 12 中 这docs https www terraform io docs configuration expressions html say 迭代器 T
  • 如何从 HttpClient 解析 JSON 字符串?

    我通过调用外部 API 获取 JSON 结果 HttpClient client new HttpClient client BaseAddress new Uri url client DefaultRequestHeaders Acce
  • 已弃用的 com.apple.eawt.ApplicationListener 的替代方案是什么

    Apple 的 Java 中的 ApplicationListener 类已被弃用 还有什么选择呢 包 com apple eawt 如果您想挂钩 打开 首选项 关于 退出 菜单项 事件 请迁移到使用 com apple eawt Appl
  • 使用 Python 和 NumPy 的非常大的矩阵

    NumPy http en wikipedia org wiki NumPy是一个非常有用的库 通过使用它 我发现它能够轻松处理相当大 10000 x 10000 的矩阵 但开始处理更大的矩阵 尝试创建 50000 x 50000 的矩阵失
  • Angular 2.0.1 AsyncPipe 不适用于 Rx 主题

    AsyncPipe 与BehaviorSubject 一起使用 但我不想用空数据初始化我的服务 因此我使用Subject 代替 问题是 NgFor 和 asyncPipe 不能与主题一起使用 这是一个问题吗 这有效 成分 export cl
  • 通过 Django Channels 和 Websockets 将实时更新推送到客户端

    我正在尝试制作一个向客户端显示实时更新数据的页面 该网站的其余部分是使用 Django 构建的 因此我尝试使用 Channels 来实现此目的 我显示的数据保存在 JSON 文件和 MySQL 数据库中 以便在网站的其他部分进行进一步计算