目次
1. I/Oとは?
2. 同期処理と非同期処理の違い
3. WebSocketとは?
4. WebSocketの動作の流れ
5. 非同期通信のメリットと活用シーン
6. DjangoでWebSocketを扱うには?
7. WSGIとは?
8. ASGIとは?
9. Django Channelsとは?
10. Consumerとは?
I/Oとは?
Input(入力)とOutput(出力)の略。
コンピュータでは、データのやり取りをするときに「I/O処理」が発生。 たとえば、以下のような動作が「I/O処理」です。I/Oは 時間がかかる処理 であり、この待ち時間をどう処理するかが重要。
I/O | 例 |
---|---|
Input | キーボード入力、ネットワークからのデータ取得、データベースアクセス |
Output | 画面への表示、ファイルへの書き込み、クライアントへのレスポンス送信 |
同期処理と非同期処理の違い
I/Oが発生したとき、コンピュータの処理方法には 「同期(同期的)」 と 「非同期(非同期的)」 という2つの方式があります。
1. 同期処理
- 1つの処理が終わるまで次の処理を待つ
- I/Oの待ち時間中は他の処理ができない
- シンプルだけど遅い
2. 非同期処理
- I/Oの待ち時間中に、他の処理を進める
- 効率的に動作する
- WebSocketのようなリアルタイム通信に向いている
WebSocketとは?
1. WebSocketは「双方向通信」の仕組み
- WebSocketは、クライアント(ブラウザ)とサーバーがリアルタイムで通信できる仕組み。
2. WebSocketの特徴
- 一度接続を確立すると、サーバーからもデータを送信できる
- リアルタイムにデータをやり取りできる
- 非同期通信で効率的に処理
3. なぜWebSocketが必要?
-
通常のHTTP通信(リクエスト & レスポンス)では、クライアントからリクエストを送らないとサーバーはデータを送れない。→ リアルタイム通知やチャットには向いていない!
-
しかし、WebSocketを使えば… → クライアントもサーバーも、自由にデータを送れる!
Websocketの動作の流れ
1 通常のHTTP通信
- クライアントがサーバーにリクエストを送る
- サーバーがレスポンスを返す
- 新しいデータが欲しいときは、またリクエストを送る(待ち時間が発生)
2. WebSocketの通信
- 最初に1回だけ接続(ハンドシェイク)
- その後、自由にデータを送受信
- クライアントもサーバーも、好きなタイミングでデータを送信可能
DjangoでWebSocketを扱うには?
Djangoでは、**「Django Channels」**を使うとWebSocketを実装できます。
1. Django Channelsをインストール
pip install channels
2. asgi.py を設定
3. Consumer(WebSocketの処理を書くクラス)を作成
4. ルーティングを設定
5. RedisなどのChannel Layerを活用して効率化
WSGI(Web Server Gateway Interface)とは?
- WSGI(Web Server Gateway Interface)は、PythonのWebアプリケーションとWebサーバーの間の「接続ルール」のこと
- Djangoの基本的な仕組みは、WSGIに基づいて動いている
- どんな時に使われるか
- 通常のHTTPリクエスト(ページを開く、フォームを送信する)
- 同期的な処理(リクエストが終わるまで次の処理が待つ)
ASGI(Asynchronous Server Gateway Interface)とは?
- ASGI(Asynchronous Server Gateway Interface)は、WSGIの後継で、非同期通信をサポートするために作られた仕組み
- WebSocketのようなリアルタイム通信にはASGIが必要
- どんな時に使われるか
- WebSocket(リアルタイム通信)
- 非同期HTTPリクエスト(速く処理したい)
- 長時間接続が必要な処理(ストリーミングやチャット)
Django Channelsとは?
Djangoは WSGI(同期処理)に基づいているので、デフォルトでは WebSocketを扱えない。
そこで登場するのが Django Channels! → DjangoをASGI対応にして、WebSocketを使えるようにするライブラリ。
Django Channelsの役割
- Djangoを ASGI対応 にする
- WebSocketを扱えるようにする
- 非同期処理を簡単に実装できるようにする
Consumerとは?
DjangoのConsumerは、WebSocketのリクエストを処理するクラス。
ViewのWebSocket版! 通常のHTTPリクエストに対して「View」を作るように、WebSocketには「Consumer」を作る。
Consumerの役割
- WebSocketの接続・切断を管理
- メッセージの送受信を処理
- データベースと連携する