问题标签 [django-channels]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
631 浏览

python - Django Channels WebSocketProtocol 错误

我正在尝试使用频道建立一个 django 实例。我已经成功部署在一个开发环境中,我可以使用 django runserver 将数据服务到本地主机。在我的 prod 环境中,我使用 apache 作为启用了 mod_proxy_wstunnel 的 proxypass 服务器。服务器启动正常,但是当我在浏览器中打开时,在 runserver 控制台中出现以下错误:

我相关的 apache 配置是这样的:

我试图在 http_protocol 文件中隔离问题,它似乎与协议对象有关。我在这里想念什么?

0 投票
1 回答
1754 浏览

django-channels - Django Channels Group/channel_session 是如何工作的?

似乎 Group 和 channel_session 可以跨多个消息会话和消费者持续存在。Channels 是如何做到这一点的?

我想设置一个长期存在的对象,就像每个消费者都可以访问的全局对象。

0 投票
1 回答
2420 浏览

javascript - Django 频道 - 回声示例不起作用

我正在按照文档站点中的说明进行操作,但是我陷入了 echo 示例,websocket 已正确创建并且已连接到服务器,但是当我向服务器发送任何内容时,我没有得到任何响应(在示例中说我应该看到一个警报窗口,其中包含我发送到套接字的相同消息,但我没有,虽然我已经更改了 console.log 的警报但仍然),我做错了什么?

settings.py 中

routing.py 中

消费者.py中:

在 asgi.py 中

然后我运行:python manage.py runserver,在我的浏览器中,我转到服务器 url,在控制台中输入以下内容:

同样,此时我应该看到一个警报窗口(或 console.log 消息),但我什么也没得到。

回复

我提出的请求处于待处理状态(尽管我在这里阅读并且第一条评论说这是正常的)

要求

服务器输出如下所示:

服务器输出

每次我尝试通过浏览器中的 websocket 发送一些东西时,服务器只打印 CONNECT 但没有显示来自 js 控制台的日志。

编辑:我已经在浏览器中针对 echo.websocket.org 测试了 websockets,我得到了预期的答案:

测试网络套接字

0 投票
0 回答
333 浏览

django - Django Channels 代码适用于 Chrome,但不适用于 Firefox

我正在使用 Django 和 Channels(Django 的新 websocket 实现)编写一个聊天应用程序。用户首先进入等候室,直到至少有 3 人加入,然后他们被引导到聊天室。该代码适用于 Chrome,但不适用于 Firefox。下面是它的工作原理:

  1. 在新连接到通道/websocket 时,服务器会检查是否至少三个人在等候室(在 consumer.py 中)。
  2. 如果至少有三个人在场,它会使用 Group 函数向频道/websocket 广播一条消息,告诉他们重定向。
  3. 客户端接收到消息并在 javascript 中执行重定向。

以下是我为调试问题所采取的步骤:

  1. 该代码适用于 Firefox 以外的浏览器(例如 Chrome)。
  2. 如果到达等候室的前两个客户端是 Firefox,而最后一个(触发服务器)是 Chrome,则该代码有效。它重定向所有三个客户端。
  3. 如果前两个客户端是 Chrome,最后一个客户端(触发服务器)是 Firefox,它会重定向 Chrome 客户端,而不是 Firefox 客户端。
  4. 问题不太可能与运行重定向的 javascript 有关,因为用简单的警报消息替换代码(在客户端收到 Group 语句后)在 Firefox 中也不起作用(但在 Chrome 中起作用)。当 Firefox 客户端是触发服务器的客户端时,就好像 Firefox 客户端永远不会收到 Group 消息。
  5. 聊天使用频道并适用于包括 Firefox 在内的所有浏览器。它成功连接、发送消息、接收消息和断开连接。

基于这些调试步骤,我认为当 Firefox 发起执行组重定向的服务器代码时出现问题。您对可能出现的问题有什么建议吗?你有什么建议可以帮助确定问题吗?

这是我认为导致问题的 consumer.py 中的代码:

这是执行重定向的 javascript 代码:

0 投票
1 回答
1515 浏览

python - 未处理 Django 频道 websocket.receive

我正在尝试通过文档实现 Django 频道。
所以就像我正在制作的文档consumers.py

并且routing.py作为

在我的settings文件中我添加了channel_layers

因此,当我运行服务器并在 chrome 控制台中发送以下内容时

我可以在 manage.py 控制台中看到 Websocket 连接正常工作并建立了连接,但该receive部分未处理且未在控制台中看到,因此不会引发来自 js 代码的警报。那么我做错了什么?

0 投票
2 回答
6857 浏览

django - 让 Django REST framework 和 Django Channels 玩得很好

我想让 Django REST 框架与 Web 套接字一起工作,并遇到了 Django Channels。我可以在 REST 框架之上构建通道吗?

我在这里读到它是 WIP,但是我想知道是否有一种简单的“轻松”方式将两者联系在一起。任何建议表示赞赏,我对 Django 还是很陌生。

0 投票
1 回答
2080 浏览

python - 查找组中添加的所有用户(reply_channels)(Django 频道)

我正在使用 Django 频道组来构建一个聊天系统,并希望获取聊天室中的所有用户。

组提供这些方法:

  • Group("group_name").add(message.reply_channel)
  • Group("group_name").discard(message.reply_channel)
  • Group("group_name").send({"text": "My group message",})

但是没有类似的东西我可以在 Group 中找到所有用户(reply_channel)。

谢谢

0 投票
1 回答
1320 浏览

django - Django Channel web sockets - 将消息附加到 Model.objects

最近,我一直在研究将 Web 套接字集成到 Django 中。根据文档,使用Channels是要走的路。

给定一个说明性模型查询

我想让我的 Web 应用程序连接到 Web 套接字服务器。当 Web 套接字服务器接收到消息时,它应该将该消息广播到客户端建立的特定套接字连接子集。

客户端(即网络浏览器)一旦收到广播消息,它应该将其附加到Request.objects。从那里开始,所有查询的列表应该使用 Django 模板自动更新,并在其中定义模型 - 无需强制用户显式刷新它。

因此,我的问题是:(我)使用通道(如果这是在 Django 中处理 Web 套接字连接的首选方式),我如何将新到达的Query对象附加到Query.objects - 而不将对象存储到数据库中因为在发送到web socket服务器之前已经插入了,(二)刷新对应的Django模板的内容。

0 投票
1 回答
3342 浏览

python - Daphne 服务器无法通过 HTTPS 连接到 websocket

我正在 Openshift 云上部署一个 Django 项目。该项目使用通道和 Websockets 使其异步工作。问题是我无法成功地将浏览器中的 websockets 连接到我在服务器端运行的 Daphne 服务器。

我正在使用 django (python2.7) 和redis墨盒使其运行。

我使用的 post_deploy 脚本如下所示:

这是我的 Django 配置。在settings.py 中

routing.py 中

消费者.py中;

在客户端,我正在运行以下代码:

请注意,由于此文档,我在 Daphne 设置和 WebSockets 设置中使用了端口 8443 。此外,Daphne 绑定到 OPENSHIFT_HOST 地址,因为在 Openshift 中无法将其绑定到 0.0.0.0(权限问题)

输出如下所示:

第一的

第二

第三

在客户端一切看起来都不错,但如果你还记得的话,在consumer.py中我有这个:

因此,在我的终端中,服务器应该打印出类似:“接收:来自”的内容,但事实并非如此。我在这里缺少什么?

tl; dr:客户端 websocket 看起来连接正确,但服务器没有打印出消息来确认它。

0 投票
1 回答
2404 浏览

python - django 频道 message.reply_channel 无属性发送

我一直试图了解 Django 的频道,但我无法将我的消息发送到我的 websocket。

这是我的consumers.py

我的routing.py

我得到了错误AttributeError: 'NoneType' object has no attribute 'send'。然而,它确实获得了 PInformation 对象,因此它确实“有点”工作。我在保存对象后立即调用它。

你能给我一些提示吗?入门指南就像我尝试的那样使用它。