天天看點

websocket 實作消息實時推送websocket 實作消息實時推送

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裡面,用戶端進行一個監聽,一旦後端有新訂單,監聽到有消息來了,就會相應操作,可以彈出框,播放音樂等等等等

websocket 實作消息實時推送websocket 實作消息實時推送

web伺服器有很多種,比如有Apache,有Nginx等等, python 的web架構也有很多,是以要實作兩者之間的通信,那麼就需要規定要用某一種"方法"去進行通信,是以WSGI就是來規定如何通信,WSGI就是一種協定,就像說明書等等,規定兩者之間怎麼進行通信. mod_wsgi, uwsgi這些是中間件

web伺服器和用戶端之間就是http協定

二. ASGI的好處:

一. 實時消息通知機制:

應用場景: 比如别人評論我的文章. 或者别人給我發私信

實作方式:

  1. http輪詢的方式, http是一種同步的通信機制,伺服器壓力相對大,發送了很多重複的封包
  2. websocket協定,建立持久可雙向通信的連接配接, websocket是一種異步的通信機制

WSGI協定不支援websocket協定

ASGI協定支援websocket協定

二. C10K問題,單台伺服器無法處理10000+個并發連接配接

後端web程式在處理一個請求的時候,常常會做如下的耗時操作:

  1. 查詢資料庫
  2. 發送郵件
  3. 請求第三方接口
  4. 做一些檔案讀寫操作

異步思想:

查詢資料庫的時候,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

繼續閱讀