WebSocketのは何ですか
WebSocketのプロトコルは、単一のTCP接続を介して全二重通信であります
WebSocketは、サーバーが積極的にクライアントにデータをプッシュすることができ、クライアントとサーバが容易との間でデータのやり取りを可能にします。WebSocket APIでは、ブラウザとサーバーはハンドシェイクを完了する必要があり、あなたは直接2間の永続的な接続を作成し、双方向のデータ伝送することができます
今、多くのサイトプッシュ技術を実現するために、使用される技術は、ポーリングしています。ポーリングは、特定の時間間隔(例えば、1秒毎)にある、ブラウザによってサーバにHTTPリクエストを発行し、サーバがクライアントのブラウザに最新のデータを返します。この伝統的なモデルでは、ブラウザがサーバに一定の要求を必要とする、しかし、HTTPリクエストは明らかにこれは無駄になり、真に効果的なデータはごく一部であってもよい長い頭を、含むことが明らかな欠点をもたらします帯域幅リソースがたくさん。
ポーリング結果を行うには比較的新しい技術が彗星です。この技術は、双方向通信であってもよいが、それでも繰り返し要求を発行する必要がありますすることができますが。そして彗星で、広く使用される長いリンクは、サーバリソースを消費します。
この場合は、HTML5のWebSocketプロトコルは、サーバリソースや帯域幅を節約することがより可能に定義されており、より多くのリアルタイム通信することができ
二つのDjangoの達成のWebSocket
ジャンゴは1つがdwebsocketで、二つの方法、1つのチャネルがある、一般的にWebSocketを達成します。チャンネルdwebsocketを使用する方が便利とは対照的に、など、ツイスト、Redisのに依存します
三dwebsocketインストール
PIP3 dwebsocketをインストール
四dwebsocket設定
= INSTALLED_APPS [ ..... ..... 'dwebsocket'、 ] MIDDLEWARE_CLASSES = [ ...... ...... 場合にのみ、URLのすべてを提供するために、 'dwebsocket.middleware.WebSocketMiddleware' #用WebSocket単独ビューのニーズから選択されなくてもよい ] 各個々の実用的なビューWebSocketをを可能にすることができるWEBSOCKET_ACCEPT_ALL#=真
ファイブ使用
htmlコード:
<!DOCTYPE HTML> <HTML LANG = "EN"> <HEAD> <METAのcharset = "UTF-8"> <タイトル>タイトル</ TITLE> </ HEAD> <BODY> <ボタンのonclick = "WebSocketTest()" >テスト</ボタン> </ BODY> <SCRIPT> 関数WebSocketTest(){ アラート(1) (ウィンドウ内の"のWebSocket")IF { 警告( "あなたのブラウザがWebSocketのをサポートしています!"); //ウェブソケットを開きます = WebSocketの新しい新WS( "WS://127.0.0.1:8000 /パス/"); ws.onopen =関数(){ //データを送信するためのソケット接続、使用send()メソッドでウェブで ws.sendは( "送信データ")、 警告("データ伝送...「); }; =関数ws.onmessage(EVT){ VAR received_msg = evt.data; アラート( "データを受信した...")、 警告( "データ:" + received_msg) }; ws.onclose =関数(){ //閉じますWebSocketの 警告( "接続がクローズ..."); }; } 他{ // WebSocketをサポートしていないブラウザ の警告を( "ブラウザがWebSocketのをサポートしていません!"); } } </ SCRIPT> </ HTML>
レイヤビュービュー:
django.shortcutsから、レンダリングのHttpResponseインポート #ここにあなたの意見を作成します。 デフログイン(要求): リターンがレンダリング(リクエスト、 'login.htmlと') dwebsocket.decoratorsからはaccept_websocketインポート @accept_websocketの デフ・パス(要求): もしrequest.is_websocket(): プリント(1) request.websocket.send( '下载完成」.encode( 'UTF-8'))
ルーティング層:
django.conf.urlsからURLインポート django.contribインポート管理者からの app01インポートビューから urlpatterns = [ URL(R '^管理/'、admin.site.urls)、 URL(R '^ログイン/'、views.login) 、 URL(R '^パス/'、views.path) ]
#dwebsocket 2つのデコレータ:require_websocketとaccept_websocekt、使用require_websocketデコレータは、一般的にすることができますaccept_websocket方法を使用し、かつ、通常のHTTPリクエストを受信したつながりができないビュー機能につながる #の 組み込みメソッドの#のdwebsocketの数: #1 #のrequest.is_websocket ()は:そうでない場合はfalseに戻り、要求は、trueを返すのWebSocketの方法があるかどうかを判断する #1 request.websocket:時間のための要求は、WebSocketの属性要求に増加したときのWebSocket、 #のWebSocket.waitは()クライアントから送信されたものを返します。メッセージを受信しなかったメッセージは、ブロッキングが発生します (#のWebSocket.read)をして待って、彼らはメッセージを受け取ることができますが返されたが、これは非ブロックで、何のメッセージはなし返されません )(#1 WebSocket.count_messagesをメッセージ番号を返します #WebSocket.has_messages ()以上の新しいメッセージがあるかどうかを返し 、クライアントがメッセージを送信するよう#1 WebSocket.send(メッセージ)、バイトへのメッセージタイプ