问题标签 [daphne]
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 - 代理将 websockets 和 http 重定向到同一个(unix)套接字
我制作了一个小 nginx conf 以将流量重定向到daphne
服务器(用于服务器django
)侦听的 unix 套接字。
根据文档:
如果您对所有流量使用 Daphne,它会在 HTTP 和 WebSocket 之间自动协商,因此无需将 WebSockets 放在单独的端口或路径上
所以我想将 websockets 和 Http 流量代理到同一个 unix 套接字。
可能吗?
我该怎么办?
这是我迄今为止尝试过的:
如果我取消注释 location bloc 中的行,页面将显示为空白。
如果我不这样做,页面会出现,但 websockets 似乎不起作用。
我怎么能解决这个问题?
开发服务器一切正常。
django - Django channels times out with daphne and worker
I have a problem with django channels. My Django app was running perfectly with WSGI for HTTP requests. I tried to migrate to channels in order to allow websocket requests, and it turns out that after installing channels and running ASGI (daphne) and a worker, the server answers error 503 and the browser displays error 504 (time out) for the http requests that were previously working (admin page for example). I read all the tutorial I could find and I do not see what the problem can be. Moreover, if I run with "runserver", it works fine.
I have an Nginx in front of the app (on a separate server), working as proxy and loadbalancer. I use Django 1.9.5 with asgi-redis>=0.10.0, channels>=0.17.0 and daphne>=0.15.0. The wsgi.py and asgi.py files are in the same folder. Redis is working.
The command I was previously using with WSGI (and which still works if I switch back to it) is:
uwsgi --http :8000 --master --enable-threads --module Cats.wsgi
The command that works using runserver is:
python manage.py runserver 0.0.0.0:8000
The commands that fail for the requests that work with the 2 other commands are:
daphne -b 0.0.0.0 -p 8000 Cats.asgi:channel_layer
python manage.py runworker
Other info: I added 'channels' in the installed apps (in settings.py)
other settings.py relevant info
}
Cats/routing.py
main/routing.py
main/consumers.py
Any idea what could be wrong? All help much appreciated! Ty
EDIT: I tried a new thing:
And this does not work, while python manage.py runserver 0.0.0.0:8000
was working...
Any idea that could help?
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 何时处理请求、何时工作人员开始处理、何时完成、何时接口服务器向客户端发送响应。目前,我不知道如何解决这个问题。
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 中的 websockets 示例,https://github.com/jacobian/channels-example,因为我打算将它用于我的生产应用程序,它也托管在 Heroku 中,并在那里使用 Whitenoise。因此,在克隆了上述示例之后,我使用 Whitenoise 进行了一些调整,但现在通过任何浏览器(chrome 或 FF)首次访问应用程序时,静态文件不会加载,当我再次刷新时它会加载静态文件,并且在第三次加载时,它再次熄灭,依此类推。这是我的设置文件:
这是我对 routing.py 进行更改的另一个文件:
过程文件是:
我现在还没有在 Heroku 上尝试过,只是在 localhost 上我观察到了这种行为,所以甚至没有将解决方案与原始应用程序集成。我使用 heroku local 在本地运行应用程序。
我究竟做错了什么?Procfile 生产中提到的过程是否已在 Heroku 上准备好?
谢谢
django - systemctl 奇怪的错误:无效的参数
这是我的服务文件:
当我执行时,sudo systemctl start daphnei
我得到:
结果systemctl status daphnei.service
:
怎么了?我正在使用 Ubuntu 服务器 16.04。
python - 是否可以在不使用操作系统调用的情况下在 python 脚本中启动 Daphne
是否可以从 python 脚本运行 daphne 进程甚至只是 Django 通道?
推荐的方法是运行
我想知道我是否可以将它绑定到一个变量并以 Tornado 的方式运行它
django - 使用 nginx、django、daphne 部署到 docker
我想将我的服务部署到 docker。
我的服务是使用 python+django 和 django-channels 开发的
── myproject
├── myproject
│ ├── settings.py
│ ├── urls.py
│ ├── asgi.py
│ ├── ...
├── collected_static
│ ├── js
│ ├── css
│ ├── ...
├── nginx
│ ├── Dockerfile
│ ├── service.conf
├── requirements.txt
├── manage.py
├── Dockerfile
└── docker-compose.yml
我的项目/Dockerfile:
我的项目/码头工人-compose.yml:
我的项目/nginx/Dockerfile
我的项目/nginx/service.conf
我写了一个命令docker-compose up -d
,nginx和daphne工作得很好。
但是当我连接到 example.com:80 时,我只能看到 nginx 默认页面。
当我连接到 example.com:8000 时,我只能看到 myproject 的服务页面。(但看不到静态文件)
我要链接nginx和daphne服务!我应该怎么办?请帮我。
- 当我只是在没有 docker 的情况下使用 nginx+daphne+django 进行部署时,我的服务运行良好。
python - 如何通过 django 频道发送心跳/ping 1
我们有Django Channels与 Daphne 和 redis 一起运行。在我们运行django-websocket-redis之前,它支持开箱即用的心跳(ping)消息。我们的客户端代码依赖于这个心跳来确认一个活跃的连接,但是在 django 中我们并不关心它是否仍然活跃。
因此,我们不需要跟踪服务器端的所有内容,但我们确实需要发送心跳。
如何使用通道或 daphne 发送心跳 / ping 消息?我找不到关于此的任何文档。
使用 django-websocket-redis 的旧实现只是"--heartbeat--"
每 n 秒发送一个 websocket 消息。文档参考
我读过 Daphne 发送 ping,但我没有看到它们出现在任何地方,我的 websocket 连接保持打开状态。
django - Django 频道 + Elastic Beanstalk
我已经设置了一个应用程序负载均衡器,它将/ws/
请求重定向到端口 5000,在那里我让 Daphne 和 4 个工作人员一起运行(通过 Supervisord 重新加载)。但是,在 Chrome 控制台中,我得到了错误
WebSocket connection to 'wss://api.example.com/ws/' failed: WebSocket is closed before the connection is established.
当尝试通过简单的 JavaScript 代码连接到我的 WebSocket 时(请参阅Multichat以了解非常接近的内容)。有任何想法吗?
路由.py
设置.py
Supervisord.conf
达芙妮.out.log
工人.out.log
失败前运行的 JavaScript 代码
显然,daphne/worker 日志中没有相关输出,这意味着连接可能一开始就没有正确路由。