问题标签 [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 投票
1 回答
3097 浏览

django - 如何确保立即立即发送 Django Channels 消息?

这个想法是在工作人员上运行后台任务worker.connect。在执行任务时,我想通过通知组将其进度发送到连接的客户端。

问题:发送到通知组的消息被延迟,直到工作人员的任务完成。因此:延迟 5 秒 ( sleep(5)) 后,消息“开始”和“停止”同时出现在客户端上。我希望消息“开始”,然后是 5 秒延迟,然后是消息“停止”。知道为什么不是这样吗?

我正在运行以下三个进程:

  • daphne tests.asgi:channel_layer
  • python manage.py runworker --exclude-channel=worker.connect
  • python manage.py runworker --only-channel=worker.connect

views.py

consumers.py

views.py

routing.py

0 投票
2 回答
161 浏览

django - 每个用户只保留一个活动连接

使用带有通道 1.0.2 的 Django 1.10.5 的 websocket。我正在使用用户令牌打开连接,并且我希望打开连接断开使用该用户 ID 的每个人。然而,即使在接受连接之前运行的命令最终也会关闭用户自己。

我是这样做的:

0 投票
1 回答
3610 浏览

django - 使用 Django 通道的 Websocket

我正在尝试使用 Django 通道与浏览器建立 websocket 连接。websocket 连接服务器失败:

用于 websocket 的 Javascript:

设置.py

路由.py

在加载页面时,ws_add会启动但连接最终会断开。关于如何调试这个或问题可能是什么的任何线索。

我正在使用命令运行服务器python manage.py runserver

编辑:降级到twisted版本 16.2.0。徒劳无功。

0 投票
2 回答
816 浏览

python - 通过 celery 向 django-channels 发送消息

所以我有一个预定的芹菜节拍任务(celery.py):

以及任务(events/tasks.py):

创建事件时,会触发接收器,该接收器应向通道组(events/receivers.py)发送消息:

主要问题是接收器在 celery beat 过程中被触发,并且没有通过 django 通道发送任何内容。没有错误消息,什么都没有,它根本没有被发送。

如何整合这两者,以便能够从 celery 后台进程向通道发送消息?

0 投票
1 回答
2548 浏览

django - 如何使用 Django 通道进行 HTTP 长轮询

我正在尝试为 Web 请求实现 HTTP 长轮询,但似乎在 Channels 文档中找不到合适的示例,一切都与 Web Sockets 有关。

使用 HTTP 消息时我需要做的是:

  • 等待保存特定模型时将发送的关于组的消息(可能使用信号)
  • 等待超时,如果没有收到消息

然后返回一些东西给客户。

现在我有可以在示例中看到的代码:

因此,我必须在此返回一些http_consumer内容,表明我暂时没有要发送的内容,但我不能在这里阻止。也许我不能返回任何东西?然后我必须在特定组上捕获新消息,或者达到超时,并将响应发送给客户端。

看来我需要将其存储在message.reply_channel某个地方以便稍后做出响应,但我不知道如何:

  • 捕获组消息并生成响应
  • 当没有收到消息(超时)时生成响应,也许延迟服务器可以在这里工作?
0 投票
0 回答
322 浏览

javascript - 不稳定的连接

我在 Python 中使用 Django 频道的后端。在其中,我有一个选择在线用户并将数据发送给另一个用户的方法。

但是当我要建立连接时,出现了一些错误和不稳定的情况。有时它可以完美运行并建立连接,有时会出现错误。

似乎“ICE Candidate”的发送随机进入了所有内容的前面,导致错误。有时它仅在响应后调用。

这个初始序列在我的 Javascript 中的 WebRTC 中是否正确?(OnIceCandidate 一直在拍摄)


  1. 不连接时...

日志 - 用户 1

日志 - 用户 2


  1. 当你连接...

日志 - 用户 1

日志 - 用户 2

0 投票
0 回答
75 浏览

python - 存储reply_channel

我有保存reply_channel在数据库中的简单任务
但是类型 Django Channels 文档说那是message.reply_channelclass
reply_channel

指向打开的 WebSocket 的唯一指针

那么,我怎样才能将这个唯一指针存储在数据库中呢?

0 投票
2 回答
3179 浏览

django - 混合 Websocket 和 REST

我正在编写一个 RESTfull api,例如,用户可以在其中创建新线程或线程中的新帖子。这是我使用普通 POST 请求的地方。我的 API 还允许用户互相发送消息。当用户在浏览器中收到我想要通知的消息时,我会使用 websockets 而不是每隔几秒轮询一次。

我的问题是

  • 由于我已经与将要发送消息的 websocket 建立了开放连接,我是否也应该使用此连接来发送消息、创建新线程或帖子?

  • 我可以使用 POST 请求来创建消息和 websockets 来实时接收它们,并使用 GET 请求来获取消息历史记录吗?这是好习惯吗?

  • 我正在使用 django rest 框架,它为我处理字段验证,如果我使用 websocket 而不是普通的 POST 请求创建资源,我将如何处理验证。

我在开发 RESTfull API 方面非常陌生,而且我才开始使用 websockets 进行开发。对于任何对您来说似乎很合乎逻辑的愚蠢问题,我们深表歉意:)

谢谢

0 投票
2 回答
1564 浏览

android - 适用于 Android 应用程序的 Django 频道 API

我目前正在为 android 社​​交网络应用程序开发服务器。我正在使用 Django,我需要为其添加实时聊天。我决定使用 django-channels,但我不确定如何使用从 android 进入服务器的身份验证令牌在聊天中进行身份验证。另外,django-channels 在这种情况下还能正常工作还是我应该考虑别的?

0 投票
3 回答
9570 浏览

python - 使用 Django 通道进行会话身份验证

尝试使用非常简单的 websockets 应用程序使用 Django 通道进行身份验证,该应用程序会回显用户使用前缀发送的任何内容"You said: "

我的流程:

我在本地测试时运行所有进程heroku local -e .env -p 8080,但您也可以单独运行它们。

注意我有 WSGIlocalhost:8080和 ASGI localhost:9090

路由和消费者:

然后进行测试,我进入与我的 HTTP 站点相同域的 Javascript 控制台,然后输入:

我的本地服务器日志显示:

当然,这没有任何意义。几个问题:

  1. 为什么 Django 会在会话中看到message.user一个AnonymousUser但有实际用户 ID _auth_user_id=1(这是我正确的用户 ID)?
  2. 我在 8080 上运行本地服务器(WSGI),在 9090(不同端口)上运行 daphne(ASGI)。而且我没有包含session_key=xxxx在我的 WebSocket 连接中 - 但是 Django 能够为正确的用户读取我的浏览器的 cookie test@test.com,?根据 Channels 文档,这应该是不可能的
  3. 在我的设置下,使用 Django 通道进行身份验证的最佳/最简单方法是什么?