ホームページ  >  記事  >  バックエンド開発  >  WebSocket を Django フレームワークに統合する

WebSocket を Django フレームワークに統合する

WBOY
WBOYオリジナル
2023-06-17 12:00:101676ブラウズ

WebSocket は、HTTP プロトコルよりも軽量かつ効率的なリアルタイム通信プロトコルであり、チャット ルームやリアルタイム通知などの機能を実装できます。 Django では、Django Channels ライブラリを利用して WebSocket をフレームワークに統合することで、リアルタイム通信を実現できます。

まず、Django と Django Channels ライブラリをインストールする必要があります。 pip ツールを通じてインストールすることも、conda などの他のパッケージ管理ツールを使用することもできます。

pip install django
pip install channels

次に、Django プロジェクトを作成する必要があります。次のコマンドを使用して、「myproject」という名前のプロジェクトを作成できます。

django-admin startproject myproject

プロジェクトでは、WebSocket コードを保存するアプリケーションとフォルダーを作成する必要があります。次のコマンドを使用して、「chat」という名前のアプリケーションを作成できます。

python manage.py startapp chat

次に、WebSocket のルーティング構成を定義する「routing.py」という名前のファイルを作成します。

from channels.routing import ProtocolTypeRouter, URLRouter
from django.urls import path
from chat.consumers import ChatConsumer

application = ProtocolTypeRouter({
    "websocket": URLRouter([
        path("ws/chat/", ChatConsumer.as_asgi())
    ])
})

上記のコードでは、「websocket」ルートを定義します。これは、WebSocket リクエストを「URLRouter」経由で「/ws/chat/」に一致するパスにルーティングします。ここでの「ChatConsumer」は、WebSocket リクエストを処理するために使用されるコンシューマ クラスです。

次に、WebSocket リクエストを処理するコードを記述するために、「consumers.py」という名前のファイルを作成する必要があります。

import json
from channels.generic.websocket import AsyncWebsocketConsumer

class ChatConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        await self.accept()

    async def disconnect(self, close_code):
        pass

    async def receive(self, text_data):
        text_data_json = json.loads(text_data)
        message = text_data_json['message']

        await self.send(text_data=json.dumps({
            'message': message
        }))

上記のコードでは、「AsyncWebsocketConsumer」クラスを継承する「ChatConsumer」という名前のコンシューマ クラスを作成しました。このクラスには 3 つのメソッドがあります:

  • 「connect」メソッド: このメソッドは、WebSocket 接続が確立されると呼び出されます。
  • 「disconnect」メソッド: このメソッドは、WebSocket 接続が閉じられるときに呼び出されます。
  • "receive" メソッド: このメソッドは、WebSocket メッセージを受信したときに呼び出されます。

このコンシューマ クラスでは、「connect」メソッドと「receive」メソッドのみを実装します。 WebSocket 接続が確立されると、connect メソッドが呼び出され、accept メソッドによって接続が受け入れられます。 「receive」メソッドでは、受信したメッセージを処理し、「send」メソッドを介してクライアントに応答を送信できます。

最後に、Django の設定ファイルで Channels ライブラリを有効にする必要があります。 「myproject」フォルダーの「settings.py」に次の構成を追加します。

INSTALLED_APPS = [
    ... # 其他应用程序
    'channels',
    'chat'
]

ASGI_APPLICATION = 'myproject.routing.application'

上記のコードでは、「チャンネル」アプリケーションと「チャット」アプリケーションを「INSTALLED_APPS」に追加し、 「ASGI_APPLICATION」で作成したばかりの「routing.py」ファイルで定義されたアプリケーション。

さて、Django に WebSocket を統合するための関連設定が完了しました。次のコマンドを使用して Django の開発サーバーを起動できます:

python manage.py runserver

その後、ブラウザと他の WebSocket クライアントを使用してメッセージを「ws://localhost:8000/ws/chat/」パスに送信し、私たちから受け取る 先ほど作成した WebSocket サービスによって送信された応答。

要約すると、Django Channels ライブラリを使用すると、WebSocket を Django フレームワークに簡単に統合して、リアルタイム通信機能を実現できます。このアプローチにより、チャット ルームやリアルタイム通知などのリアルタイム コミュニケーションを必要とするアプリケーションをより柔軟かつ効率的に実装できるようになります。

以上がWebSocket を Django フレームワークに統合するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。