天天看點

Django - Channels (Daphene 的使用小結)

首先推薦閱讀下面博文,清晰的講述了channels 的來龍去脈。

https://www.cnblogs.com/skying555/p/5698115.html

總結

1. server & worker

Channels将 Django分成了兩部分:接口服務 (Daphne),消息消費者(worker)。是以想要處理HTTP 請求,我們得運作一個worker

python manage.py runworker      

(順便說一句,我們仍然可以通過運作python manage.py runserver指令來做本地測試。當這麼做時, Channels隻是在同一程序裡運作起Daphne和一個worker。)

2. 多執行個體: 服務和消費者示例

# 多服務
daphne xxx.asgi:channel_layer --port 8000 --bind 0.0.0.0 -v2 &
daphne xxx.asgi:channel_layer --port 8002 --bind 0.0.0.0 -v2 &

# 多消費者
python manage.py runworker -v2 &
python manage.py runworker -v2 &
python manage.py runworker -v2 &
python manage.py runworker -v2 &
python manage.py runworker -v2 &
python manage.py runworker -v2 &
python manage.py runworker -v2 &
python manage.py runworker -v2 &      

3. 關于AWSGI - Django, http請求的小結

3.1 使用一個daphene啟動Django服務後,當處理一個http 請求時,若隻有一個worker在處理(未完成時)會挂起AWSGI server, 導緻網站暫時無法通路或延遲通路。

3.2 推薦給一個daphne配置多個worker,配置的方法參考機器CPU-core/processer 數量,以及實際并發的數量。

3.3 解決 Daphne timeout:503: 給daphne添加逾時設定(官方說法預設為 60s,實測大概是120s)

daphne xxx.asgi:channel_layer -t 300 --port 8000 --bind 0.0.0.0 -v2 &