使用 Daphne 服务 Django 和频道

Posted

技术标签:

【中文标题】使用 Daphne 服务 Django 和频道【英文标题】:Serving Django and Channels with Daphne 【发布时间】:2017-07-19 16:06:49 【问题描述】:

我在 Google Compute Engine 上有一个 Django 项目。这是我的 Django 项目的结构。

example_channels
├── db.sqlite3
├── example
│   ├── admin.py
│   ├── apps.py
│   ├── consumers.py
│   ├── __init__.py
│   ├── migrations
│   │   
│   ├── models.py
│   ├── templates
│   │   └── example
│   │       ├── _base.html
│   │       └── user_list.html
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── example_channels
│   ├── asgi.py
│   ├── __init__.py
│   ├── routing.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

按照教程б我做了一个asgi.py

import os
from channels.asgi import get_channel_layer

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings")

channel_layer = get_channel_layer()

我使用asgi_redis 作为后端。设置文件如下所示:

CHANNEL_LAYERS = 
    'default': 
        'BACKEND': 'asgi_redis.RedisChannelLayer',
        'CONFIG': 
            'hosts': [('localhost', 6379)],
        ,
        'ROUTING': 'example_channels.routing.channel_routing',
    

然后我尝试启动服务器。我运行python manage.py runworker & 并得到:

~/websockets_prototype/example_channels$ 2017-07-19 16:04:19,204 - INFO - runworker - Usi
ng single-threaded worker.
2017-07-19 16:04:19,204 - INFO - runworker - Running worker against channel layer default (asgi_redis.core.RedisCha
nnelLayer)
2017-07-19 16:04:19,205 - INFO - worker - Listening on channels http.request, websocket.connect, websocket.disconne
ct, websocket.receive

然后运行 ​​Daphne:

~/websockets_prototype/example_channels$ 2017-07-19 16:05:28,619 INFO     Starting server
 at tcp:port=80:interface=0.0.0.0, channel layer example_channels.asgi:channel_layer.
2017-07-19 16:05:28,620 INFO     HTTP/2 support not enabled (install the http2 and tls Twisted extras)
2017-07-19 16:05:28,620 INFO     Using busy-loop synchronous mode on channel layer
2017-07-19 16:05:28,620 INFO     Listening on endpoint tcp:port=80:interface=0.0.0.0

然后我开始向服务器发送请求,但收到 This site can’t be reached 错误。

【问题讨论】:

您的网站是否等待一段时间并给您网站无法访问错误或? 你有想过这个吗? 【参考方案1】:

尝试在端口 8000 中使用 daphne,并在 settings.py 中查看您的 ALLOWED_HOSTS=["*"]

【讨论】:

以上是关于使用 Daphne 服务 Django 和频道的主要内容,如果未能解决你的问题,请参考以下文章

Django 频道 daphne 返回 200 状态码

在 systemd 上使用 daphne 运行 django 频道

开始使用 Django 频道时遇到问题

使用 SSL 使用 Daphne + NGINX 部署 Django 通道

Django 频道 + Elastic Beanstalk

在负载均衡器后面运行多个 daphne 实例:django-channels