優點
上一篇所用的教學為同步的聊天室範例
這邊主要會修改為非同步聊天室的範例
# chat/consumers.py
import json
from channels.generic.websocket import AsyncWebsocketConsumer
class ChatConsumer(AsyncWebsocketConsumer):
async def connect(self):
self.room_name = self.scope["url_route"]["kwargs"]["room_name"]
self.room_group_name = f"chat_{self.room_name}"
# Join room group
await self.channel_layer.group_add(self.room_group_name, self.channel_name)
await self.accept()
async def disconnect(self, close_code):
# Leave room group
await self.channel_layer.group_discard(self.room_group_name, self.channel_name)
# Receive message from WebSocket
async def receive(self, text_data):
text_data_json = json.loads(text_data)
message = text_data_json["message"]
# Send message to room group
await self.channel_layer.group_send(
self.room_group_name, {"type": "chat.message", "message": message}
)
# Receive message from room group
async def chat_message(self, event):
message = event["message"]
# Send message to WebSocket
await self.send(text_data=json.dumps({"message": message}))
有注意到這裡有使用到 async, await 的寫法嗎? 這是屬於非同步的寫法
非同步是什麼? 可以參考下方的連結
python3 manage.py runserver
重啟伺服器即可
預期要與 Day 09 輸出一樣, 但這裡的效能設計會比 Day 09 表現來的好, 這裡就不提效能差異比較了.
以上
async tutorial
async tutorial 1