Maison  >  Article  >  développement back-end  >  Intégration de WebSocket dans le framework Django

Intégration de WebSocket dans le framework Django

WBOY
WBOYoriginal
2023-06-17 12:00:101676parcourir

WebSocket est un protocole de communication en temps réel plus léger et plus efficace que le protocole HTTP et peut implémenter des fonctions telles que des salons de discussion et des notifications en temps réel. Dans Django, nous pouvons intégrer WebSocket dans le framework en tirant parti de la bibliothèque Django Channels pour réaliser une communication en temps réel.

Tout d’abord, nous devons installer Django et la bibliothèque Django Channels. Il peut être installé via l'outil pip, ou d'autres outils de gestion de packages tels que conda peuvent être utilisés.

pip install django
pip install channels

Ensuite, nous devons créer un projet Django. Vous pouvez créer un projet nommé "monprojet" en utilisant la commande suivante.

django-admin startproject myproject

Dans le projet, nous devons créer une application et un dossier pour stocker le code WebSockets. Une application nommée « chat » peut être créée à l'aide de la commande suivante.

python manage.py startapp chat

Ensuite, créez un fichier appelé « routing.py » qui définit la configuration de routage pour WebSocket.

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())
    ])
})

Dans le code ci-dessus, nous définissons une route "websocket", qui acheminera les requêtes WebSocket via "URLRouter" vers le chemin correspondant à "/ws/chat/". Le "ChatConsumer" est ici la classe de consommateur utilisée pour gérer les requêtes WebSocket.

Ensuite, nous devons créer un fichier appelé "consumers.py" pour écrire le code permettant de gérer les requêtes WebSocket.

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
        }))

Dans le code ci-dessus, nous avons créé une classe de consommateur appelée "ChatConsumer" qui hérite de la classe "AsyncWebsocketConsumer". Il existe trois méthodes dans cette classe :

  • Méthode "connect" : Cette méthode sera appelée lorsque la connexion WebSocket sera établie.
  • Méthode "disconnect": Cette méthode sera appelée lorsque la connexion WebSocket sera fermée.
  • Méthode « receive » : Cette méthode sera appelée lors de la réception d'un message WebSocket.

Dans cette classe de consommateurs, nous avons uniquement implémenté les méthodes « connecter » et « recevoir ». Lorsqu'une connexion WebSocket est établie, la méthode « connect » sera appelée et la connexion sera acceptée via la méthode « accept ». Dans la méthode « recevoir », nous pouvons traiter le message reçu et envoyer la réponse au client via la méthode « envoyer ».

Enfin, nous devons activer la bibliothèque Channels dans le fichier de paramètres de Django. Ajoutez la configuration suivante dans "settings.py" dans le dossier "myproject" :

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

ASGI_APPLICATION = 'myproject.routing.application'

Dans le code ci-dessus, nous avons ajouté les applications "channels" et "chat" dans "INSTALLED_APPS" puis dans "ASGI_APPLICATION" Configurer l'application défini dans le fichier "routing.py" que nous venons de créer.

D'accord, nous avons maintenant terminé les réglages pertinents pour l'intégration de WebSocket dans Django. Le serveur de développement de Django peut être démarré avec la commande suivante :

python manage.py runserver

Ensuite, vous pouvez utiliser un client WebSocket tel qu'un navigateur pour envoyer des messages au chemin "ws://localhost:8000/ws/chat/" et recevoir le WebSocket nous venons d'écrire La réponse envoyée par le service.

En résumé, en utilisant la bibliothèque Django Channels, nous pouvons facilement intégrer WebSocket dans le framework Django pour réaliser des fonctions de communication en temps réel. Cette approche nous permet de mettre en œuvre de manière plus flexible et efficace des applications nécessitant une communication en temps réel, telles que des salons de discussion et des notifications en temps réel.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn