问题标签 [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.

0 投票
1 回答
1177 浏览

django - 代理将 websockets 和 http 重定向到同一个(unix)套接字

我制作了一个小 nginx conf 以将流量重定向到daphne服务器(用于服务器django)侦听的 unix 套接字。

根据文档

如果您对所有流量使用 Daphne,它会在 HTTP 和 WebSocket 之间自动协商,因此无需将 WebSockets 放在单独的端口或路径上

所以我想将 websockets 和 Http 流量代理到同一个 unix 套接字。

  1. 可能吗?

  2. 我该怎么办?

这是我迄今为止尝试过的:

  • 如果我取消注释 location bloc 中的行,页面将显示为空白。

  • 如果我不这样做,页面会出现,但 websockets 似乎不起作用。

我怎么能解决这个问题?

开发服务器一切正常。

0 投票
2 回答
3731 浏览

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?

0 投票
2 回答
1570 浏览

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 何时处理请求、何时工作人员开始处理、何时完成、何时接口服务器向客户端发送响应。目前,我不知道如何解决这个问题。

0 投票
1 回答
1584 浏览

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 服务器有问题?

0 投票
1 回答
1929 浏览

django - 使用 Django 通道的静态文件服务问题

我正在尝试使用 Django 中的 websockets 示例,https://github.com/jacobian/channels-example,因为我打算将它用于我的生产应用程序,它也托管在 Heroku 中,并在那里使用 Whitenoise。因此,在克隆了上述示例之后,我使用 Whitenoise 进行了一些调整,但现在通过任何浏览器(chrome 或 FF)首次访问应用程序时,静态文件不会加载,当我再次刷新时它会加载静态文件,并且在第三次加载时,它再次熄灭,依此类推。这是我的设置文件:

这是我对 routing.py 进行更改的另一个文件:

过程文件是:

我现在还没有在 Heroku 上尝试过,只是在 localhost 上我观察到了这种行为,所以甚至没有将解决方案与原始应用程序集成。我使用 heroku local 在本地运行应用程序。

我究竟做错了什么?Procfile 生产中提到的过程是否已在 Heroku 上准备好?

谢谢

0 投票
2 回答
23386 浏览

django - systemctl 奇怪的错误:无效的参数

这是我的服务文件:

当我执行时,sudo systemctl start daphnei我得到:

结果systemctl status daphnei.service

怎么了?我正在使用 Ubuntu 服务器 16.04。

0 投票
3 回答
1106 浏览

python - 是否可以在不使用操作系统调用的情况下在 python 脚本中启动 Daphne

是否可以从 python 脚本运行 daphne 进程甚至只是 Django 通道?

推荐的方法是运行

我想知道我是否可以将它绑定到一个变量并以 Tornado 的方式运行它

0 投票
2 回答
9673 浏览

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 进行部署时,我的服务运行良好。
0 投票
0 回答
3565 浏览

python - 如何通过 django 频道发送心跳/ping 1

我们有Django Channels与 Daphne 和 redis 一起运行。在我们运行django-websocket-redis之前,它支持开箱即用的心跳(ping)消息。我们的客户端代码依赖于这个心跳来确认一个活跃的连接,但是在 django 中我们并不关心它是否仍然活跃。

因此,我们不需要跟踪服务器端的所有内容,但我们确实需要发送心跳。

如何使用通道或 daphne 发送心跳 / ping 消息?我找不到关于此的任何文档。

使用 django-websocket-redis 的旧实现只是"--heartbeat--"每 n 秒发送一个 websocket 消息。文档参考

我读过 Daphne 发送 ping,但我没有看到它们出现在任何地方,我的 websocket 连接保持打开状态。

0 投票
1 回答
875 浏览

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 日志中没有相关输出,这意味着连接可能一开始就没有正确路由。