问题标签 [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.
python - 在自定义命令中与 Django 通道进行数据绑定
我开始使用 Django 频道。我需要我的模型设备的绑定数据。我做。当我在管理界面中更改设备对象时,我收到有关在客户端(Web 浏览器)上更改的消息,但我也通过自定义 django 管理命令运行简单的 WebsocketServer。当在自定义命令过程中更改了设备对象时,我没有在客户端收到任何消息。我该如何解决?
设备/模型.py
设备/数据绑定.py
项目/路由.py
设备/消费者.py
我运行自定义高速公路 WebSockerServer 的简单自定义命令。
项目/管理/命令/runcustomcommand.py
项目/websocketserver/autobahn_server.py
WebSocketServer 类(对象):
客户端连接(js代码):
我跑:
更新
我意外地发现,如果在我的管理命令的开头添加此代码,则对对象的后续更改会到达客户端:
这就像某种初始化。但这很奇怪。
python - 在 django-channels 中等待 websocket.receive 消费者
使用 django-channels 向客户端发送内容后如何等待客户端的响应?
每当Group.send()
从函数调用send_to_client()
并在客户端接收到消息时,send_to_client()
都期望从客户端返回响应,该响应正在websocket.receive
通道上接收。
有没有办法返回response_msg
insend_to_client()
函数?
现在我到达了这里
Sample Code for consumers.py:
因此,一旦消息到达客户端,客户端将向服务器发送响应,该响应将由ws_receive(message)
函数通过文件websocket.receive
中定义的通道接收,urls.py
有没有办法让我的功能看起来像这样?
django - django频道跑三个worker,正常吗?
我有一个非常简单的 django 项目设置,使用文档 https://channels.readthedocs.io/en/stable/getting-started.html
在设置中:
在 rounting.py 中:
当我运行时:
它打印:
而三个工人似乎出了什么问题,还是正常的?但其他一切正常。
非常感谢您的建议
python - 如何配置 django 频道?
我的技术栈是 Redis 作为通道后端,Postgresql 作为数据库,Daphne 作为 ASGI 服务器,Nginx 在整个应用程序的前面。一切都使用 Docker Swarm 部署,外部只有 Redis 和数据库。我有大约 20 个虚拟主机,20 个接口服务器,40 个 http worker 和 20 个 websocket worker。负载平衡是使用 Ingress 覆盖 Docker 网络完成的。
问题是,有时在性能方面会发生非常奇怪的事情。大多数请求在 400 毫秒内处理,但有时请求可能需要 2-3 秒,即使在非常小的负载下也是如此。使用 Django 调试工具栏或基于中间件的分析器分析工作人员没有显示任何内容(时间 0.01 秒左右)
我的问题:有没有什么好的方法可以用 django-channels 分析整个请求路径?我想知道每个阶段需要多少时间,即 Daphne 何时处理请求、何时工作人员开始处理、何时完成、何时接口服务器向客户端发送响应。目前,我不知道如何解决这个问题。
python-3.x - ImportError:没有名为“asgiref.base_layer”的模块
我正在尝试来自https://blog.heroku.com/in_deep_with_django_channels_the_future_of_real_time_apps_in_django的 django 频道示例,但是当我运行命令daphne chat.asgi:channel_layer --port 8888时它会抛出错误ImportError: No module named 'asgiref.base_layer'。我已经安装了此示例所需的所有软件包。下面是我的 requirements.txt 文件
我正在使用 redis-server 3.2.6 和 python 3.5.2
django - Django Channels Worker 没有响应 websocket.connect
我在使用 django 频道时遇到问题。Daphne 正确地接受了 WebSocket CONNECT 请求,但是工作人员没有使用consumer.py中提供的方法响应请求。问题是这种情况只在大多数时候发生。有时它会使用consumer.py中的方法进行响应,但大多数时候 worker 根本没有响应。我有一个重复的代码在 vagrant (trusty64) 环境中运行良好,但代码在实际的 trusty64 机器中的行为类似于。需要注意的是,托管该应用程序的trusty64机器还运行着其他应用程序(大约4个应用程序同时运行)。
我有一个这样的routing.py设置
对应的consumer.py看起来像这样
和settings.py中的一些与频道相关的行,如下所示
引用另一个问题,我试过像这样运行 daphne 和 worker
我已经捕获了达芙妮和工人的日志,它看起来像这样
达芙妮日志:
相应的工作日志:
正如您所看到的,当有 WSCONNECT 事件时,工作人员不会响应它。
还有一个与这个问题很接近的问题,通过将 Twisted 降级到 16.2 解决了这个问题,但它对我不起作用。
更新 2017 年 1 月 3 日
尽管对 nginx、supervisor、gunicorn 和 daphne 使用相同的代码和相同的设置,但我无法在本地 vagrant 机器上复制该问题。我尝试更改通道层设置,使其使用 IPC 而不是 redis,并且可以正常工作。这是设置:
然而,这并不能解决当前的问题,因为我打算使用 Redis 通道层,因为与 IPC 相比,它更容易扩展。这是否意味着我的 redis 服务器有问题?
django - 将附加数据保存到 Django 数据库
我正在使用 Django Channels,我希望能够将其他字段与json
帖子的数据一起保存到数据库中。
我的模型中有一个外键,Postmie
它指向email
我的用户模型中的字段。Postmie
是负责将帖子保存到数据库的模型。外键创建一个名为 的字段email_id
。当我将帖子保存到数据库时,我还想获取发布帖子的用户的电子邮件并将其保存在数据库中。我该怎么做呢?我没有使用 Django 表单。
我的模型与此处Postmie
的 Django Channels 教程中的模型相同Post
,唯一的区别是我的模型有一个额外的外键指向我的用户模型中的电子邮件字段。
email=request.user.email
不起作用。我正在考虑将电子邮件放在隐藏字段中,但这对我来说似乎不安全。
我使用的方法实际上与此处 consumers.py
的 Django Channels 教程中的方法相同。一切正常,但我无法在数据库中输入其他字段以获取帖子。
邮递模型:
python - Django Channels:延迟组消息
我正在编写多人在线浏览器游戏,现在遇到了一些麻烦
我的消费者:
和功能:
但是客户端没有来自服务器的任何消息。使用 Django Channels.delay 我不知道如何发布它。我已经结合了一个消费者 message.send 和 group.send - 一切正常,但这件事不想这样做。
websocket - Django 频道文件/图片上传
我想使用django-channels上传文件和图像,但我不知道从哪里开始。似乎没有太多关于 websockets 和文件/图像上传的文档。有任何想法吗?
django - Django 频道和 docker-compose 错误
通过 docker 和 docker-compose 运行 runserver 时,出现此错误并且无法连接到 django:
在本地运行时,一切运行正常。这是我的requirements.txt:
Django==1.10.4 psycopg2==2.6.2 频道==0.17.3 asgi-redis==1.0.0
这是我的 docker-compose 文件:
有任何想法吗?