Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengintegrasikan WebSocket ke dalam rangka kerja Django

Mengintegrasikan WebSocket ke dalam rangka kerja Django

WBOY
WBOYasal
2023-06-17 12:00:101676semak imbas

WebSocket ialah protokol komunikasi masa nyata yang lebih ringan dan cekap daripada protokol HTTP dan boleh melaksanakan fungsi seperti bilik sembang dan pemberitahuan masa nyata. Dalam Django, kami boleh menyepadukan WebSocket ke dalam rangka kerja dengan memanfaatkan perpustakaan Saluran Django untuk mencapai komunikasi masa nyata.

Pertama, kita perlu memasang Django dan pustaka Saluran Django. Ia boleh dipasang melalui alat pip, atau alat pengurusan pakej lain seperti conda boleh digunakan.

pip install django
rrree

Seterusnya, kita perlu mencipta projek Django Anda boleh mencipta projek bernama "myproject" dengan menggunakan arahan berikut.

pip install channels

Dalam projek, kita perlu mencipta aplikasi dan folder untuk menyimpan kod WebSockets. Aplikasi bernama "chat" boleh dibuat menggunakan arahan berikut.

django-admin startproject myproject

Seterusnya, buat fail yang dipanggil "routing.py" yang mentakrifkan konfigurasi penghalaan WebSocket.

python manage.py startapp chat

Dalam kod di atas, kami mentakrifkan laluan "websocket", yang akan menghalakan permintaan WebSocket melalui "URLRouter" ke laluan yang sepadan dengan "/ws/chat/". "ChatConsumer" di sini ialah kelas pengguna yang digunakan untuk mengendalikan permintaan WebSocket.

Seterusnya, kita perlu mencipta fail yang dipanggil "consumers.py" untuk menulis kod yang mengendalikan permintaan 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())
    ])
})

Dalam kod di atas, kami telah mencipta kelas pengguna yang dipanggil "ChatConsumer" yang mewarisi kelas "AsyncWebsocketConsumer". Terdapat tiga kaedah dalam kelas ini:

  • kaedah "sambung": Kaedah ini akan dipanggil apabila sambungan WebSocket diwujudkan.
  • Kaedah "putus sambungan": Kaedah ini akan dipanggil apabila sambungan WebSocket ditutup.
  • Kaedah "terima": Kaedah ini akan dipanggil apabila mesej WebSocket diterima.

Dalam kelas pengguna ini, kami hanya melaksanakan kaedah "sambung" dan "terima". Apabila sambungan WebSocket diwujudkan, kaedah "sambung" akan dipanggil dan sambungan akan diterima melalui kaedah "terima". Dalam kaedah "terima" kita boleh memproses mesej yang diterima dan menghantar respons kepada pelanggan melalui kaedah "hantar".

Akhir sekali, kami perlu mendayakan pustaka Saluran dalam fail tetapan Django. Tambahkan konfigurasi berikut dalam "settings.py" dalam folder "myproject":

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

Dalam kod di atas, kami menambah aplikasi "saluran" dan "sembang" pada "INSTALLED_APPS", dan kemudian Sediakan aplikasi yang ditakrifkan dalam fail "routing.py" yang baru kami buat dalam "ASGI_APPLICATION".

Baiklah, kini kami telah melengkapkan tetapan yang berkaitan untuk menyepadukan WebSocket dalam Django. Pelayan pembangunan Django boleh dimulakan dengan arahan berikut:

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

ASGI_APPLICATION = 'myproject.routing.application'

Kemudian, anda boleh menggunakan klien WebSocket seperti pelayar untuk menghantar mesej ke "ws://localhost:8000/ws/chat/" laluan dan terima daripada kami Respons yang dihantar oleh perkhidmatan WebSocket yang baru anda tulis.

Ringkasnya, dengan menggunakan pustaka Saluran Django, kami boleh menyepadukan WebSocket dengan mudah ke dalam rangka kerja Django untuk mencapai fungsi komunikasi masa nyata. Pendekatan ini membolehkan kami melaksanakan aplikasi yang memerlukan komunikasi masa nyata seperti bilik sembang dan pemberitahuan masa nyata dengan lebih fleksibel dan cekap.

Atas ialah kandungan terperinci Mengintegrasikan WebSocket ke dalam rangka kerja Django. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn