Javascript is required
Django3.x WebSocket

Django无需第三方程序启动WebSockets

Django从3.0版开始引入了ASGI接口,在3.1版中引入了异步视图。我们的解决方案将基于异步视图。

使用

  • Python3,7
  • Django3.1

WebSocket客户端与应用程序之间的通信是基于事件的。

https://asgi.readthedocs.io/en/latest/specs/www.html#websocket定义了两种类型的事件:发送和接收。

**接收事件。**这些是客户端发送到您的应用程序的事件。让我们看看它们:

  1. websocket.connect 当客户端尝试与我们的应用程序建立连接时发送
  2. websocket.receive 当客户向我们的应用发送数据时发送
  3. websocket.disconnect 告诉我们客户端已断开连接。

发送事件由我们的应用程序发出给客户端(例如浏览器)。以下是它们的列表:

  1. websocket.accept —如果我们要允许连接,我们会将事件发送回客户端
  2. websocket.send —通过此事件,我们将数据推送到客户端
  3. websocket.close 当我们想要中止连接时由应用程序发出。

当浏览器打开连接时,ASGI协议服务器(我们将在后面讨论)将websocket.connect事件发送给我们。我们的应用程序必须使用websocket.acceptwebsocket.close根据我们的逻辑对其做出响应。很简单:websocket.accept如果允许连接,则发出websocket.close,或者取消连接就发出。例如,如果用户没有连接权限或未登录,则可能要取消连接。我将假定您在接下来的步骤中允许连接。

接受连接后,应用程序即可使用websocket.sendwebsocket.receive事件通过该套接字发送和接收数据。

最后,当浏览器离开页面或刷新页面时,websocket.disconnect将发送到应用程序。作为开发人员,您仍然可以控制连接,并且可以随时通过发送websocket.close事件来中止连接。


创建项目前的记录

# 虚拟环境
python -m venv venv

# 激活
source venv/bin/activate

# 安装
pip install django
....
...
Installing collected packages: sqlparse, pytz, asgiref, django
Successfully installed asgiref-3.3.0 django-3.1.3 pytz-2020.4 sqlparse-0.4.1


# 运行
python3 manage.py runserver

......
November 08, 2020 - 17:30:46
Django version 3.1.3, using settings 'websocket.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

创建一个APP

python3 manage.py startapp front