在引入Django通道时,我是否需要更改我的普通Django代码?
您好,我是python领域的初学者,所以我仍在努力理解使用ASGI时的注意事项。我阅读了一些教程和文档,并在youtube上观看了一些视频。然而,我在某些方面不确定 我有一个使用Django+Django Rest框架的小型后端应用程序 我的代码非常简单,由框架中最常见的概念组成:视图、序列化器、模型、URL等。此外,我使用关系数据库 我的环境是:在引入Django通道时,我是否需要更改我的普通Django代码?,django,django-rest-framework,django-channels,daphne,asgi,Django,Django Rest Framework,Django Channels,Daphne,Asgi,您好,我是python领域的初学者,所以我仍在努力理解使用ASGI时的注意事项。我阅读了一些教程和文档,并在youtube上观看了一些视频。然而,我在某些方面不确定 我有一个使用Django+Django Rest框架的小型后端应用程序 我的代码非常简单,由框架中最常见的概念组成:视图、序列化器、模型、URL等。此外,我使用关系数据库 我的环境是: Python 3.8 Django 3 Django Rest框架3.11 现在,我需要添加对WebSocket的支持,并完成了Django频道
- Python 3.8
- Django 3
- Django Rest框架3.11
- 我安装了Django通道2.4.0(Daphene 2.5.0)
- 向已安装的应用程序添加“频道”
- 我用一个空的ProtocolTypeRouter创建了一个routing.py文件
- 我将ASGI_应用程序添加到我的settings.py中
- 我将asgi.py文件配置为使用通道
- 目前,我还没有配置任何通道层
- 目前,我还没有创建任何WebSocket端点
- 考虑到我所有的代码都是同步的,是否有必要对其进行任何调整
- 考虑到daphene是一个ASGI服务器,上面的配置已经完成了我的同步代码在daphene中安全执行所需的所有魔法
- 我是否可以仅使用ASGI以可靠和稳定的方式为普通HTTP和WebSockets请求提供服务?或者,是否建议使用WSGI为HTTP流量提供服务,只将WebSockets流量留给daphene
- 关于同步代码,应该注意哪些方面
通道层
使用不同的方法,只提供异步版本。
当从同步代码发出调用时,需要使用async_to_sync包装器;例如:
from asgiref.sync import async_to_sync
async_to_sync(channel_layer.group_send)(
group, {
"type": 'data_received',
"content": data,
})
2)考虑到daphene是一台ASGI服务器,上述配置已经具备了在daphene中安全执行同步代码所需的所有功能?
缺少的单个详细信息是(在设置文件中):
3)我能否仅使用ASGI以可靠和稳定的方式为正常HTTP和WebSocket请求提供服务?或者,是否建议使用WSGI为HTTP流量提供服务,并只将WebSockets流量留给daphene?
使用通道2,您可以安全地选择对HTTP和WebSocket请求使用Daphne,因为Daphne将在HTTP和WebSocket之间自动协商;这是我在项目中通常做的事情
拆分HTTP和WebSocket流量,因此:
- 通过WSGI服务器运行标准HTTP请求
- 仅将Daphne(或uvicorn)用于WSGI无法完成的事情,如WebSocket、HTTP长轮询或其他物联网协议
是可能的,但完全是可选的。Marlon,您是单独使用django通道,还是同时使用可选通道层组件?目前,仅使用django通道,但很快我们将考虑使用Redis引入通道层。
ROOT_URLCONF = 'project.urls'