首先推薦閱讀下面博文,清晰的講述了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 &