首頁 後端開發 Python教學 Python伺服器程式設計:使用django-channels實作WebSockets

Python伺服器程式設計:使用django-channels實作WebSockets

Jun 18, 2023 am 10:43 AM
python 伺服器 websockets

在現今的Web開發中,即時通訊是不可或缺的功能之一。由於HTTP協議是一種請求-回應協議,因此使用HTTP的傳統方式來實現即時通訊非常不方便。 WebSockets協定是一種新興的協議,它為網路應用程式提供了即時雙向通訊功能,而且可以在同一個連接上發送和接收數據,非常適合即時應用程式。在Python伺服器程式設計中,可以使用django-channels框架來輕鬆實作WebSockets。

  1. 安裝django-channels

在開始使用django-channels之前,首先需要安裝它。可以使用pip來安裝:

pip install channels
登入後複製
  1. 建立Django專案

接下來,建立一個Django專案。在Django 2.x以上版本中,可以使用命令列工具建立專案:

django-admin startproject myproject
登入後複製
  1. #設定django-channels

在安裝django-channels之後,需要將其添加到Django項目中。開啟settings.py文件,並在INSTALLED_APPS中加入'channels'。此外,還需要為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,這是一個實作了簡單記憶體儲存的通道層。

  1. 建立路由

在建立django-channels應用程式之前,需要先建立一個路由來路由傳入的WebSocket請求。路由是一個映射表,它將URL路徑映射到特定的Consumer類別。在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類別。

  1. 建立Consumer

在django-channels中,Consumer是一個處理網路請求的類別。可以在路由中將請求路由到consumer,然後consumer會處理請求並回傳回應。 Consumer一般由一個async def方法(即協程)實作。在建構Consumer時,必須繼承channels.generic.websocket.WebSocketConsumer類,並實作兩個方法:

  • connect(self): 當WebSocket連線建立時,django-channels呼叫該方法。
  • receive(self, text_data=None, bytes_data=None): 當從WebSocket連線接收到資料時,django-channels呼叫此方法。

以下是一個簡單的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))
登入後複製
  1. #啟動Django伺服器

現在,所有的設定都已完成,可以啟動Django伺服器並測試WebSocket連線了。在終端機中輸入以下指令來啟動Django伺服器:

python manage.py runserver
登入後複製

如果一切正常,應該可以透過http://127.0.0.1:8000/ws/來測試WebSocket連線了,如果連線成功,WebSocket Consumer的connect方法將會被執行。

總結:

使用django-channels實作WebSocket非常簡單,基本上只需要幾個步驟。需要注意的一點是,在django-channels應用程式中,經常使用asyncio協程,因此,需要使用Python 3.5及更高版本。此外,通道層的配置也很重要,如果想要使用持久化存儲,可以使用其他通道層,例如RedisChannelLayer等。

以上是Python伺服器程式設計:使用django-channels實作WebSockets的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1672
14
CakePHP 教程
1428
52
Laravel 教程
1332
25
PHP教程
1277
29
C# 教程
1257
24
PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

sublime怎麼運行代碼python sublime怎麼運行代碼python Apr 16, 2025 am 08:48 AM

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

See all articles