Django実現websocket

1885 ワード

django実装websocketには大きく2つの方法があり、1つはchannelsであり、1つはdwebsocketである.channelsはredis,twistedなどに依存し,dwebsocketを用いるより便利である.
インストール:
pip install dwebsocket
構成:

INSTALLED_APPS = [
    .....
    .....
    'dwebsocket',
]
 
MIDDLEWARE_CLASSES = [
    ......
    ......
    'dwebsocket.middleware.WebSocketMiddleware'  #     URL  websocket,               
 
]

WEBSOCKET_ACCEPT_ALL=True   #               websockets

簡単な使用:シミュレーションファイルのダウンロードの簡単な例

from dwebsocket.decorators import accept_websocket
@accept_websocket
def test(request):
    if not request.is_websocket():  #      websocket  
        return render(request, 'websocket.html')
    else:
        download = Haproxy()
        t = threading.Thread(target=download.run)
        t.start()
        sent = []
        while download.status:
            if len(download.res_dict) > len(sent):
                for i in download.res_dict.keys():
                    if i not in sent:
                        sent.append(i)
                request.websocket.send(str(sent[-1]+str(download.res_dict[sent[-1]])).encode('utf-8'))  #         
        if not download.status:
            request.websocket.send('    '.encode('utf-8'))

詳細:
dwebsocketには2つの装飾器があります:require_Websocketとaccept_Websocekt、requireを使用Websocket装飾器は、ビュー関数が正常なhttpリクエストを受信できないため、accept_を使用するのが一般的です.Websocket方式でいいのですが、
dwebsocketのいくつかの組み込み方法:
request.is_Websocket():リクエストがWebsocket方式であるか否かを判断し、trueを返す.そうでない場合false request.websocketを返す.要求がwebsocketである場合、requestにwebsocket属性が追加され、WebSocket.wait()はクライアントから送信されたメッセージを返し、メッセージが受信されないとWebSocket.readがブロックされる()waitと同様に返されるメッセージを受け入れることができるが、これは非ブロックであり、None WebSocket.count_messages()返されるメッセージの数がないWebSocket.has_messages()返される新しいメッセージが来るかどうかWebSocket.send(message)クライアントのようにメッセージを送信し、messageはbyteタイプである