websocket 實作消息實時推送
https://www.jb51.net/article/166411.htm
https://github.com/ops-coffee/demo/tree/master/websocket
https://channels.readthedocs.io/en/latest/
https://asgi.readthedocs.io/en/latest/implementations.html#django-channels
websocket是用戶端和服務端之間的通信,是以它肯定有用戶端和服務端,使用html5原生的websocket, 把websocket分為用戶端和服務端,是以兩個端都需要開發, 用戶端是将代碼寫在js裡面,用戶端進行一個監聽,一旦後端有新訂單,監聽到有消息來了,就會相應操作,可以彈出框,播放音樂等等等等
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNCM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPB5kenR1T5VkaOBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL3YTMyQTNygTMwIDOwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
web伺服器有很多種,比如有Apache,有Nginx等等, python 的web架構也有很多,是以要實作兩者之間的通信,那麼就需要規定要用某一種"方法"去進行通信,是以WSGI就是來規定如何通信,WSGI就是一種協定,就像說明書等等,規定兩者之間怎麼進行通信. mod_wsgi, uwsgi這些是中間件
web伺服器和用戶端之間就是http協定
二. ASGI的好處:
一. 實時消息通知機制:
應用場景: 比如别人評論我的文章. 或者别人給我發私信
實作方式:
- http輪詢的方式, http是一種同步的通信機制,伺服器壓力相對大,發送了很多重複的封包
- websocket協定,建立持久可雙向通信的連接配接, websocket是一種異步的通信機制
WSGI協定不支援websocket協定
ASGI協定支援websocket協定
二. C10K問題,單台伺服器無法處理10000+個并發連接配接
後端web程式在處理一個請求的時候,常常會做如下的耗時操作:
- 查詢資料庫
- 發送郵件
- 請求第三方接口
- 做一些檔案讀寫操作
異步思想:
查詢資料庫的時候,web程式去處理其他事情,但查詢有結果的時候,通知web程式繼續處理(回調)
Channels is comprised of several packages:
- Channels, the Django integration layer
- Daphne, the HTTP and Websocket termination server
- asgiref, the base ASGI library
- channels_redis, the Redis channel layer backend
ayer backend