django+websocket

1.websocket相关

1.1轮询

1.2长轮询

1.3websocket

1.3.1 websocket底层原理(重点)

1.3.2 django中配置channels

1.3.3 websocket 收发数据

小结:

实现一个系统:多个用户同时打开网页,呈现出来就是群聊

http协议特点:

解决方案

轮询:让浏览器每隔2s向后台发送一次请求,缺点:延迟,请求太多网站压力太大

长轮询:客户端向服务端发送请求,服务器最多夯20s,一旦有数据就立即返回,数据的响应不延迟(大平台用这种方式做聊天室 webQQ、web微信)

websocket:客户端和服务器创建连接不断开,可以先实现双向通信

1.1轮询

  • 访问/home显示的是聊天室界面
  • 点击发送内容,数据发送到后台
  • 定时获取消息,在界面上展示

1.2长轮询

  • 访问/home/显示的聊天室界面,每个用户创建一个队列
  • 点击发送内容,数据也可以发送到后台,扔到每个人的队列中
  • 获取消息,去自己的队列中获取数据,然后在界面上展示

队列功能测试

import queue

q = queue.Queue()

q.put(123)
q.put("666")

v1 = q.get()
print(v1)

v2 = q.get()
print(v2)

try:
    v3 = q.get(timeout=10)  #如果没有人往队列中放数据就一直等待,timeout为等待10s
    print(v3)
except queue.Empty as e:
    pass

问题:

  • 服务端持有这个连接,压力是否会很大

基于IO多复用+异步

1.3websocket

原来web中:

http协议 无状态&短连接

无状态:一次请求发、发送,断开连接后下一次再发请求,不知道上一次已经请求过了

短连接:一次请求 响应 断开连接

  • 客户端主动连接服务端
  • 客户端向服务端发送消息,服务器接收到返回数据
  • 客户端接收数据
  • 断开连接

https协议 除了http有的以外+对数据进行加密

我们开发过程中想要保留一些状态信息,基于cookie来做 cookie与http协议无关

现在支持:

http协议:一次请求一次响应

websocket协议:创建连续持久的连接不断开,基于这个连接进行收发数据【服务端向客户端主动推送消息用websocket】

  • web聊天室
  • 柱状图,饼图, 实时图表更新(大屏)

http协议(可以分成三个步骤)

数据传输

断开连接

websocket协议 是建立在http协议上的

  • 连接 客户端发起
  • 握手(验证),客户端发送一个消息,后端接受到消息再做一些特殊处理并返回,服务端支持websocket协议

从请求【握手】信息中提取 Sec-WebSocket-Key

利用magic_string 和 Sec-WebSocket-Key 进行hmac1加密,再进行base64加密

将加密结果响应给客户端

注: magic string为:258EAFA5-E914-47DA-95CA-C5AB0DC85B11 默认就是这个数据

请求握手信息

GET  / chatsocket HTTP / 1.1 Host:  127.0 . 0.1 : 8002 Connection: Upgrade Pragma: no - cache Cache - Control: no - cache Upgrade: websocket Origin: http: / / localhost: 63342 Sec - WebSocket - Version:  13 Sec - WebSocket -

Original: https://blog.csdn.net/m0_43448734/article/details/127440692
Author: 伤情
Title: django+websocket

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/733897/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球