오늘날의 웹 개발에서 실시간 커뮤니케이션은 빼놓을 수 없는 기능 중 하나입니다. HTTP 프로토콜은 요청-응답 프로토콜이므로 실시간 통신을 달성하기 위해 전통적인 HTTP 방법을 사용하는 것은 매우 불편합니다. WebSockets 프로토콜은 웹 애플리케이션에 실시간 양방향 통신 기능을 제공하고 동일한 연결에서 데이터를 보내고 받을 수 있는 새로운 프로토콜로, 실시간 애플리케이션에 매우 적합합니다. Python 서버 프로그래밍에서 WebSocket은 django-channels 프레임워크를 사용하여 쉽게 구현할 수 있습니다.
django-channels를 사용하기 전에 먼저 django-channels를 설치해야 합니다. pip를 사용하여 설치할 수 있습니다.
pip install channels
다음으로 Django 프로젝트를 만듭니다. Django 2.x 이상에서는 명령줄 도구를 사용하여 프로젝트를 생성할 수 있습니다:
django-admin startproject myproject
django-channels를 설치한 후 Django 프로젝트에 추가해야 합니다. settings.py 파일을 열고 INSTALLED_APPS에 '채널'을 추가하세요. 또한 django-channels에 대해 일부 설정을 구성해야 합니다.
# settings.py # 添加channels到INSTALLED_APPS INSTALLED_APPS = [ # ... 'channels', ] # 配置channels ASGI_APPLICATION = 'myproject.routing.application' CHANNEL_LAYERS = { 'default': { 'BACKEND': 'channels.layers.InMemoryChannelLayer', }, }
위 코드에서 ASGI_APPLICATION은 ASGI 애플리케이션의 진입점을 지정하고 CHANNEL_LAYERS는 기본 채널 계층의 유형과 매개변수를 지정합니다. 이번 예시에서는 간단한 메모리 저장을 구현하는 채널 레이어인 InMemoryChannelLayer를 사용했습니다.
django-channels 애플리케이션을 만들기 전에 들어오는 WebSocket 요청을 라우팅하기 위한 경로를 만들어야 합니다. 경로는 URL 경로를 특정 소비자 클래스에 매핑하는 매핑 테이블입니다. Django에서는 일반적으로 urls.py 파일에 경로가 정의되어 있지만 django-channels에서는 ASGI 프로토콜을 사용하므로 다음과 같이 Routing.py에 경로가 정의됩니다.
# myproject/routing.py from channels.routing import ProtocolTypeRouter, URLRouter from django.urls import path application = ProtocolTypeRouter({ # WebSocket使用的协议类型是“websocket”,将它放在第一位 "websocket": URLRouter([ path("ws/", MyConsumer.as_asgi()), ]), })
위 코드에서는 ProtocolTypeRouter 생성을 사용합니다. 프로토콜 경로를 지정하고 WebSocket 기반 하위 경로를 설정합니다. 이 예에서 WebSocket이 요청한 URL은 /ws/이며 연결 시 MyConsumer 클래스가 사용됩니다.
django 채널에서 Consumer는 네트워크 요청을 처리하는 클래스입니다. 요청은 경로를 통해 소비자에게 라우팅될 수 있으며, 그러면 소비자는 요청을 처리하고 응답을 반환합니다. 소비자는 일반적으로 async def 메서드(예: 코루틴)로 구현됩니다. Consumer를 빌드할 때,channels.generic.websocket.WebSocketConsumer 클래스를 상속하고 두 가지 메소드를 구현해야 합니다:
다음은 간단한 Consumer 예제입니다:
# myapp/consumers.py import asyncio import json from channels.generic.websocket import AsyncWebsocketConsumer class MyConsumer(AsyncWebsocketConsumer): async def connect(self): """ WebSocket连接建立时执行。 """ await self.accept() async def disconnect(self, code): """ WebSocket连接中断时执行。 """ pass async def receive(self, text_data=None, bytes_data=None): """ 当从WebSocket连接接收到数据时执行。 """ # 解析WebSocket发送的JSON数据 data = json.loads(text_data) # 从JSON数据中获取请求 request = data['request'] # 这里是处理请求的代码 # ... # 发送响应到WebSocket连接 response = {'status': 'OK', 'data': request} await self.send(json.dumps(response))
이제 모든 설정이 완료되었으므로 Django 서버를 시작하고 WebSocket 연결을 테스트할 수 있습니다. Django 서버를 시작하려면 터미널에 다음 명령을 입력하세요.
python manage.py runserver
모든 것이 정상이라면 http://127.0.0.1:8000/ws/를 통해 WebSocket 연결을 테스트할 수 있어야 합니다. WebSocket 소비자의 연결 메소드가 실행됩니다.
요약:
django-channel을 사용하여 WebSocket을 구현하는 것은 매우 간단하며 기본적으로 몇 단계만 거치면 됩니다. 한 가지 주목할 점은 django-channels 애플리케이션에서는 asyncio 코루틴이 자주 사용되므로 Python 3.5 이상이 필요하다는 것입니다. 또한, 채널 계층의 구성도 매우 중요합니다. 영구 저장소를 사용하려면 RedisChannelLayer와 같은 다른 채널 계층을 사용할 수 있습니다.
위 내용은 Python 서버 프로그래밍: django-channels를 사용하여 WebSocket 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!