首頁 後端開發 Python教學 使用 Python 了解 WebSocket

使用 Python 了解 WebSocket

Sep 10, 2024 am 06:01 AM

Understanding WebSockets using Python

簡介

在當今的數位環境中,即時通訊非常重要。傳統的 HTTP 由於其請求-回應模型和固有的延遲而存在不足。隨著業務和應用程式越來越需要即時資料傳輸(無論是即時股票更新、多人遊戲還是協作工具),WebSocket 已成為一項改變遊戲規則的技術。與 HTTP 不同,WebSocket 支援全雙工、雙向通信,允許伺服器和用戶端透過單一持久連接即時發送和接收訊息。這不僅減少了開銷,還顯著提高了 Web 應用程式的效能和回應能力。

什麼是 WebSocket

WebSocket 是一種通訊協議,可透過單一長期 TCP 連線提供全雙工通訊通道。這意味著一旦客戶端和伺服器之間建立了 WebSocket 連接,雙方就可以同時連續地發送和接收數據,而無需重新開啟連接。 WebSocket 被設計為高效且低延遲,使其成為即時應用程式的理想選擇。

為什麼要使用 WebSocket ?

WebSockets 用於客戶端和伺服器之間需要即時通訊的場景。與遵循請求-回應模型(客戶端必須發起每個請求)的傳統 HTTP 不同,WebSocket 允許雙向通訊。這使得 WebSocket 在需要將資料從伺服器即時推送到客戶端而無需客戶端請求的應用程式中特別有用。

現實世界用例

  • 聊天應用程式:WebSockets 常用於聊天應用程序,這些應用程式需要即時無延遲地發送和接收訊息。
  • 即時串流媒體:WebSocket 可用於串流即時視訊或音頻,允許伺服器在新內容可用時將其推送到客戶端。
  • 協作平台:在 Google Docs 等協作工具中,WebSocket 允許多個使用者查看其他人所做的即時更改,而無需刷新頁面。

WebSocket 與 HTTP

溝通模型

  • HTTP:遵循請求-回應模型,客戶端發起請求,伺服器回應。回應後,連線關閉。
  • WebSockets:WebSockets 提供全雙工、長期存在的連接,客戶端和伺服器都可以連續發送和接收數據,而無需每次重新開啟連接。

連線處理

  • HTTP:每個請求都會開啟一個新連接,回應完成後關閉連線。
  • WebSockets:初次握手(使用 HTTP)後,連線保持開啟狀態,允許即時通信,無需重新建立連線。

效率

  • HTTP:適合一次性通訊或要求不頻繁的事務。它是無狀態的,因此為了持續通信,需要使用長輪詢等技術,這可能會佔用大量資源。
  • WebSockets:WebSockets 對於即時和雙向通訊非常有效,因為連線保持開啟。與長輪詢等技術相比,它們使用的資源更少。

延遲

  • HTTP:總是存在延遲(延遲),因為客戶端必須請求,伺服器必須回應。這對於即時用例來說效率很低。
  • WebSockets:建立連線後,資料幾乎可以立即在客戶端和伺服器之間流動,減少延遲,使其成為即時應用程式的理想選擇。

用例

  • HTTP:最適合由客戶端發起請求的傳統 Web 應用程式(例如 REST API)。
  • WebSockets:非常適合即時應用程序,如聊天應用程式、股票交易平台、即時儀表板和線上遊戲。

WebSocket 的優點

  1. 即時通訊:WebSocket 允許即時、低延遲通信,使其成為需要即時更新的應用程式的理想選擇。
  2. 雙向資料流:客戶端和伺服器都可以隨時傳送和接收數據,不像HTTP,伺服器只能回應客戶端發起的請求。
  3. 減少開銷:透過保持連線打開,WebSocket 減少了重複建立新 HTTP 連線的需要,從而節省了頻寬並減少了延遲。
  4. 效率:與長輪詢或連續資料傳輸的 HTTP 請求相比,WebSocket 使用更少的資源。
  5. 可擴充性:WebSockets 可以有效地處理許多並發連接,使其適合可擴展的即時應用程式。

WebSocket 的工作原理

  1. 握手:WebSocket 連線以 HTTP 握手開始。客戶端向伺服器發送帶有 Upgrade 標頭的請求,將連線協定從 HTTP 切換為 WebSocket。
  2. 連線建立:握手後,連線建立。伺服器和客戶端保持持久的、開放的 TCP 連線。
  3. 全雙工通訊:一旦 WebSocket 連線打開,資料就可以同時來回傳送。伺服器和客戶端都可以隨時發起通訊。
  4. 關閉連線:當不再需要連線時,伺服器或用戶端都可以關閉連線。這將終止會話並釋放資源。

WebSocket 用例

  1. 聊天應用程式:WhatsApp 和 Slack 等即時訊息服務使用 WebSockets 在用戶之間進行即時訊息傳遞。
  2. 即時更新:WebSockets 為金融交易平台(股票價格)、體育比分或即時新聞提要等應用程式提供即時數據更新。
  3. 協作工具:WebSocket 可以在 Google Docs 或 Figma 等協作工具中實現即時更新,多個使用者可以同時編輯文件。
  4. 線上遊戲:多人遊戲依靠 WebSocket 進行即時玩家操作和互動。
  5. 物聯網和感測器資料:具有即時資料流的裝置(例如物聯網裝置、天氣感測器)使用 WebSocket 傳送連續更新。

使用 Python 和 WebSocket 建立即時應用程式

讓我們使用 WebSockets 與 Python(使用 FastAPI)和 Streamlit 建立一個即時應用程式。

1。設定 FastAPI WebSocket 伺服器

此程式碼使用 FastAPI 設定 WebSocket 伺服器。

from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from typing import List

app = FastAPI()

class ConnectionManager:
    def __init__(self):
        self.active_connections: List[WebSocket] = []

    async def connect(self, websocket: WebSocket):
        await websocket.accept()
        self.active_connections.append(websocket)

    def disconnect(self, websocket: WebSocket):
        self.active_connections.remove(websocket)

    async def broadcast(self, message: str):
        for connection in self.active_connections:
            await connection.send_text(message)

manager = ConnectionManager()

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await manager.connect(websocket)
    try:
        while True:
            data = await websocket.receive_text()
            await manager.broadcast(f"Message: {data}")
    except WebSocketDisconnect:
        manager.disconnect(websocket)
登入後複製

此 WebSocket 伺服器可以處理多個連線並向所有連線的用戶端廣播訊息。

2。 Streamlit 前端

現在,讓我們使用 Streamlit 建立一個即時應用程序,連接到 WebSocket 伺服器並接收即時更新。

import streamlit as st
import asyncio
import websockets

async def websocket_receive():
    uri = "ws://localhost:8000/ws"
    async with websockets.connect(uri) as websocket:
        while True:
            message = await websocket.recv()
            st.write(f"Received: {message}")

st.title("Real-Time WebSocket Client")

if st.button("Connect to WebSocket"):
    st.write("Connected!")
    asyncio.run(websocket_receive())
登入後複製

說明:當使用者按一下「連線到 WebSocket」按鈕時,Streamlit 前端會與 WebSocket 伺服器建立連線並偵聽訊息。

3。運行應用程式

運行 FastAPI 伺服器:

uvicorn server:app --reload
登入後複製

運行 Streamlit 應用程式:

streamlit run your_script.py
登入後複製

即時溝通的關鍵步驟:

  • WebSocket 設定:WebSocket 伺服器運作並接受連線。
  • Streamlit 連線:Streamlit 前端發起與 WebSocket 伺服器的連線。
  • 全雙工通訊:客戶端(Streamlit)和伺服器(FastAPI)都可以即時發送/接收訊息。

以上是使用 Python 了解 WebSocket的詳細內容。更多資訊請關注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教學
1673
14
CakePHP 教程
1428
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
Python與C:學習曲線和易用性 Python與C:學習曲線和易用性 Apr 19, 2025 am 12:20 AM

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

學習Python:2小時的每日學習是否足夠? 學習Python:2小時的每日學習是否足夠? Apr 18, 2025 am 12:22 AM

每天學習Python兩個小時是否足夠?這取決於你的目標和學習方法。 1)制定清晰的學習計劃,2)選擇合適的學習資源和方法,3)動手實踐和復習鞏固,可以在這段時間內逐步掌握Python的基本知識和高級功能。

Python vs.C:探索性能和效率 Python vs.C:探索性能和效率 Apr 18, 2025 am 12:20 AM

Python在開發效率上優於C ,但C 在執行性能上更高。 1.Python的簡潔語法和豐富庫提高開發效率。 2.C 的編譯型特性和硬件控制提升執行性能。選擇時需根據項目需求權衡開發速度與執行效率。

Python vs. C:了解關鍵差異 Python vs. C:了解關鍵差異 Apr 21, 2025 am 12:18 AM

Python和C 各有優勢,選擇應基於項目需求。 1)Python適合快速開發和數據處理,因其簡潔語法和動態類型。 2)C 適用於高性能和系統編程,因其靜態類型和手動內存管理。

Python標準庫的哪一部分是:列表或數組? Python標準庫的哪一部分是:列表或數組? Apr 27, 2025 am 12:03 AM

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

Python:自動化,腳本和任務管理 Python:自動化,腳本和任務管理 Apr 16, 2025 am 12:14 AM

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

科學計算的Python:詳細的外觀 科學計算的Python:詳細的外觀 Apr 19, 2025 am 12:15 AM

Python在科學計算中的應用包括數據分析、機器學習、數值模擬和可視化。 1.Numpy提供高效的多維數組和數學函數。 2.SciPy擴展Numpy功能,提供優化和線性代數工具。 3.Pandas用於數據處理和分析。 4.Matplotlib用於生成各種圖表和可視化結果。

Web開發的Python:關鍵應用程序 Web開發的Python:關鍵應用程序 Apr 18, 2025 am 12:20 AM

Python在Web開發中的關鍵應用包括使用Django和Flask框架、API開發、數據分析與可視化、機器學習與AI、以及性能優化。 1.Django和Flask框架:Django適合快速開發複雜應用,Flask適用於小型或高度自定義項目。 2.API開發:使用Flask或DjangoRESTFramework構建RESTfulAPI。 3.數據分析與可視化:利用Python處理數據並通過Web界面展示。 4.機器學習與AI:Python用於構建智能Web應用。 5.性能優化:通過異步編程、緩存和代碼優

See all articles