0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Websocketを理解する

Posted at

目次

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回だけ接続(ハンドシェイク)
  • その後、自由にデータを送受信
  • クライアントもサーバーも、好きなタイミングでデータを送信可能

image.png

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の接続・切断を管理
  • メッセージの送受信を処理
  • データベースと連携する
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?