问题标签 [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.
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
django - 每个用户只保留一个活动连接
使用带有通道 1.0.2 的 Django 1.10.5 的 websocket。我正在使用用户令牌打开连接,并且我希望打开连接断开使用该用户 ID 的每个人。然而,即使在接受连接之前运行的命令最终也会关闭用户自己。
我是这样做的:
django - 使用 Django 通道的 Websocket
我正在尝试使用 Django 通道与浏览器建立 websocket 连接。websocket 连接服务器失败:
用于 websocket 的 Javascript:
设置.py
路由.py
在加载页面时,ws_add
会启动但连接最终会断开。关于如何调试这个或问题可能是什么的任何线索。
我正在使用命令运行服务器python manage.py runserver
。
编辑:降级到twisted
版本 16.2.0。徒劳无功。
python - 通过 celery 向 django-channels 发送消息
所以我有一个预定的芹菜节拍任务(celery.py):
以及任务(events/tasks.py):
创建事件时,会触发接收器,该接收器应向通道组(events/receivers.py)发送消息:
主要问题是接收器在 celery beat 过程中被触发,并且没有通过 django 通道发送任何内容。没有错误消息,什么都没有,它根本没有被发送。
如何整合这两者,以便能够从 celery 后台进程向通道发送消息?
django - 如何使用 Django 通道进行 HTTP 长轮询
我正在尝试为 Web 请求实现 HTTP 长轮询,但似乎在 Channels 文档中找不到合适的示例,一切都与 Web Sockets 有关。
使用 HTTP 消息时我需要做的是:
- 等待保存特定模型时将发送的关于组的消息(可能使用信号)
- 等待超时,如果没有收到消息
然后返回一些东西给客户。
现在我有可以在示例中看到的代码:
因此,我必须在此返回一些http_consumer
内容,表明我暂时没有要发送的内容,但我不能在这里阻止。也许我不能返回任何东西?然后我必须在特定组上捕获新消息,或者达到超时,并将响应发送给客户端。
看来我需要将其存储在message.reply_channel
某个地方以便稍后做出响应,但我不知道如何:
- 捕获组消息并生成响应
- 当没有收到消息(超时)时生成响应,也许延迟服务器可以在这里工作?
javascript - 不稳定的连接
我在 Python 中使用 Django 频道的后端。在其中,我有一个选择在线用户并将数据发送给另一个用户的方法。
但是当我要建立连接时,出现了一些错误和不稳定的情况。有时它可以完美运行并建立连接,有时会出现错误。
似乎“ICE Candidate”的发送随机进入了所有内容的前面,导致错误。有时它仅在响应后调用。
这个初始序列在我的 Javascript 中的 WebRTC 中是否正确?(OnIceCandidate 一直在拍摄)
- 不连接时...
日志 - 用户 1
日志 - 用户 2
- 当你连接...
日志 - 用户 1
日志 - 用户 2
python - 存储reply_channel
我有保存reply_channel
在数据库中的简单任务
但是类型
Django Channels 文档说那是message.reply_channel
class
reply_channel
指向打开的 WebSocket 的唯一指针
那么,我怎样才能将这个唯一指针存储在数据库中呢?
django - 混合 Websocket 和 REST
我正在编写一个 RESTfull api,例如,用户可以在其中创建新线程或线程中的新帖子。这是我使用普通 POST 请求的地方。我的 API 还允许用户互相发送消息。当用户在浏览器中收到我想要通知的消息时,我会使用 websockets 而不是每隔几秒轮询一次。
我的问题是
由于我已经与将要发送消息的 websocket 建立了开放连接,我是否也应该使用此连接来发送消息、创建新线程或帖子?
我可以使用 POST 请求来创建消息和 websockets 来实时接收它们,并使用 GET 请求来获取消息历史记录吗?这是好习惯吗?
我正在使用 django rest 框架,它为我处理字段验证,如果我使用 websocket 而不是普通的 POST 请求创建资源,我将如何处理验证。
我在开发 RESTfull API 方面非常陌生,而且我才开始使用 websockets 进行开发。对于任何对您来说似乎很合乎逻辑的愚蠢问题,我们深表歉意:)
谢谢
android - 适用于 Android 应用程序的 Django 频道 API
我目前正在为 android 社交网络应用程序开发服务器。我正在使用 Django,我需要为其添加实时聊天。我决定使用 django-channels,但我不确定如何使用从 android 进入服务器的身份验证令牌在聊天中进行身份验证。另外,django-channels 在这种情况下还能正常工作还是我应该考虑别的?
python - 使用 Django 通道进行会话身份验证
尝试使用非常简单的 websockets 应用程序使用 Django 通道进行身份验证,该应用程序会回显用户使用前缀发送的任何内容"You said: "
。
我的流程:
我在本地测试时运行所有进程heroku local -e .env -p 8080
,但您也可以单独运行它们。
注意我有 WSGIlocalhost:8080
和 ASGI localhost:9090
。
路由和消费者:
和
然后进行测试,我进入与我的 HTTP 站点相同域的 Javascript 控制台,然后输入:
我的本地服务器日志显示:
当然,这没有任何意义。几个问题:
- 为什么 Django 会在会话中看到
message.user
一个AnonymousUser
但有实际用户 ID_auth_user_id=1
(这是我正确的用户 ID)? - 我在 8080 上运行本地服务器(WSGI),在 9090(不同端口)上运行 daphne(ASGI)。而且我没有包含
session_key=xxxx
在我的 WebSocket 连接中 - 但是 Django 能够为正确的用户读取我的浏览器的 cookietest@test.com
,?根据 Channels 文档,这应该是不可能的。 - 在我的设置下,使用 Django 通道进行身份验证的最佳/最简单方法是什么?