ASGI 서버 선택
settings.py에서 ASGI_APPLICATION을 지정
config.asgi.application과 같이 지정비동기 View / Consumer 구현 방식 결정
AsyncWebsocketConsumer를 사용하는 것내부 API와의 WebSocket 스트리밍 통신
아래와 같은 예시 코드를 이용해 Django↔프론트, Django↔내부API 모두 웹소켓으로 비동기 연결하여 Django 서버가 메시지 중계
while True 안에서 await ws.recv()로 내부 API의 슽리밍 데이터를 받고, 곧바로 await self.send(…)로 프론트에 내보내는 것from channels.generic.websocket import AsyncWebsocketConsumer
import asyncio
import json
import websockets # 비동기 라이브러리
class ChatConsumer(AsyncWebsocketConsumer):
async def connect(self):
await self.accept()
async def receive(self, text_data):
user_data = json.loads(text_data)
query = user_data.get("query")
# 내부 API와 WebSocket 연결
async with websockets.connect("wss://internal-llm.example.com/stream") as ws:
await ws.send(json.dumps({"query":query}))
# 내부 LLM이 토큰 단위, 단계 단위로 메시지 스트리밍
while True:
try:
msg = await asyncio.wait_for(ws.recv(), timeout=10.0)
except asyncio.TimeoutError:
# 타임아웃 처리
break
except websockets.ConnectionClosed:
# 연결 종료
break
# 받은 메시지를 그대로 프론트에 전송
await self.send(msg)
async def disconnect(self, close_code):
pass