现在Django 3.0附带了对ASGI的支持,将Websockets添加到Django应用程序中不需要任何额外的依赖关系。 在本文中,您将学习如何通过扩展默认的ASGI应用程序来使用Django处理Websocket。 我们将介绍如何在示例ASGI应用程序中处理Websocket连接,发送和接收数据以及实现业务逻辑。
入门
首先,您需要在计算机上安装Python> = 3.6。 Django 3.0仅与Python 3.6及更高版本兼容,因为它使用了async
和await
关键字。 完成Python版本设置后,创建一个项目目录并cd
进入该目录。 然后,将Django安装在virtualenv
内,并在项目目录中创建一个新的Django应用程序:
$ mkdir django_websockets && cd django_websockets
$ python -m venv venv
$ source venv/bin/activate
$ pip install django
$ django-admin startproject websocket_app .
看一下Django应用程序的websocket_app
目录。 您应该看到一个名为asgi.py
的文件。 其内容将如下所示:
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault( 'DJANGO_SETTINGS_MODULE' , 'websocket_app.settings' )
application = get_asgi_application()
该文件提供了默认的Django ASGI设置,并公开了一个名为application的ASGI application
程序,可以使用uvicorn
或daphne
类的ASGI服务器运行该application
程序。 在进一步介绍之前,让我们看一下ASGI应用程序的结构。
ASGI应用程序结构
ASGI或“异步服务器网关接口”是用于使用Python构建异步Web服务的规范。 它是WSGI的精神继承者,WSGI已被Django和Flask等框架使用了很长时间。 ASGI使您可以使用Python的本机async
/ await
功能来构建支持长期连接的Web服务,例如Websockets和Server Sent Events。
ASGI应用程序是一个async
函数,它带有3个参数: