モチベーション
- django で web app を作っているときにトランプゲームアプリを作りたくなった
- オンラインで対戦できる仕様にしたい
- server からの送信も必要となり、双方向の通信ができるようにしたい
- そこで WebSocket を使う、、、
まとめスライド
- スライドにかるくまとめた
WebSocket Study 2020/05/11
Index WebSocket とは HTTP との比較 通信の仕組み ハンドシェイク 双方向通信の実現 Python での利用 Django での利用 ASGI
WebSocket とは プロトコルの一種 Webにおいて双方向通信を低コストで行うための仕組み WebSocket は HTTP 上の相乗りプロトコル 確立済みの HTTP/HTTPS 回線上で任意長・任意フォーマットデータの双方向通信 RFC WebSocket Protocol (日本語 非公式)
HTTPとの比較 HTTP 1つのコネクションで1つのリクエスト リクエストはクライアントからしか送ることができない WebSocket 一度コネクションを確立したあとは、サーバとクライアントのどちらからも通信を行うことが可能(サーバプッシュ機能) 一度コネクションを確立するとそのコネクション上で通信を行う
通信の仕組み ~ ハンドシェイク ハンドシェイクはHTTP通信によって行われる。 リクエスト HTTPのUpgradeヘッダを使用し、プロトコルの変更を行う。 レスポンス ステータスコード101「Switching Protocols」が返る。 ハンドシェイクによってコネクションが確立し、これ以降はHTTPではなくWebSocketのプロトコルで通信が行われることになる。
通信の仕組み ~ 双方向通信の実現 ハンドシェイクによってコネクションが確立すると、双方向通信をWebSocketプロトコルで行うことができるようになる。 送信データはフレームという単位で扱われる。
Python での利用 library websocket_client websockets
Django での利用 library channels
ASGI Asynchronous Server Gateway Interface WSGI を継承 asyncioを介して非同期で実行される 複数のプロトコルをサポート Channels の独自規格?
Reference 調査まとめ 今さら聞けないWebSocket~WebSocketとは~ WebSocket のはなし