オムライスの備忘録

数学・統計学・機械学習・プログラミングに関することを記す

WebSocket Study with Python

モチベーション

  • 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 のはなし