實際應用中,並不是所有的后端框架默認都支持websocket協議,如果你想使用的話,可能需要借助於不同的第三方模塊
"""
后端框架
django
默認不支持websocket
第三方模塊:channels
flask
默認不支持websocket
第三方模塊:geventwebsocket
tornado
默認支持websocket
"""
django如何支持websocket
# 下載channels模塊需要注意的點
# 1.版本不要用最新版 推薦使用2.3版本即可 如果你安裝最新版可能會出現自動將你本地的django版本升級為最新版
# 2.python解釋器建議使用3.6版本(3.5可能會有問題,3.7可能會有問題 具體說明問題沒有給解釋)
pip3 install channels==2.3
"""channels模塊內部幫你封裝了握手/加密/解密等所有操作"""
基本使用
-
注冊app
INSTALLED_APPS = [ 'channels' ]
注冊完成后,django會無法啟動,會直接報錯
CommandError: You have not set ASGI_APPLICATION, which is needed to run the server.
-
配置
# 2 配置變量 ASGI_APPLICATION = 'day01.routing.application' ASGI_APPLICATION = '項目名同名的文件名.文件夾下py文件名默認就叫routing.該py文件內部的變量名默認就叫application'
-
去項目名同名的文件夾下面新建一個py文件,定義application變量
from channels.routing import ProtocolTypeRouter,URLRouter application = ProtocolTypeRouter({ 'websocket':URLRouter([ # 書寫websocket路由與視圖函數對應關系 ]) })
上述操作配置完成后,啟動django會由原來的wsgiref啟動變成asgi啟動(內部:達芙妮)
並且啟動之后django即支持websocket也支持http協議
基於http的操作還是在urls.py和views.py中完成
基於websocket的操作則在routing.py和consumer.py(對應的應用中創建)中完成