iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
AI & Data

已 django + channels 來取得即時股價資料的推播系列 第 10

[Day 10] Django channels 範例(下)

  • 分享至 

  • xImage
  •  

非同步範例

優點

  • 提高效能
  • 降低多人使用的花費時間成本

上一篇所用的教學為同步的聊天室範例
這邊主要會修改為非同步聊天室的範例

# 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


上一篇
[Day 09] Django channels 範例(中)
下一篇
[Day 11] 申請 Fugle API Token
系列文
已 django + channels 來取得即時股價資料的推播30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言