簡介
在當今的數位環境中,即時通訊非常重要。傳統的 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 的優點
- 即時通訊:WebSocket 允許即時、低延遲通信,使其成為需要即時更新的應用程式的理想選擇。
- 雙向資料流:客戶端和伺服器都可以隨時傳送和接收數據,不像HTTP,伺服器只能回應客戶端發起的請求。
- 減少開銷:透過保持連線打開,WebSocket 減少了重複建立新 HTTP 連線的需要,從而節省了頻寬並減少了延遲。
- 效率:與長輪詢或連續資料傳輸的 HTTP 請求相比,WebSocket 使用更少的資源。
- 可擴充性:WebSockets 可以有效地處理許多並發連接,使其適合可擴展的即時應用程式。
WebSocket 的工作原理
- 握手:WebSocket 連線以 HTTP 握手開始。客戶端向伺服器發送帶有 Upgrade 標頭的請求,將連線協定從 HTTP 切換為 WebSocket。
- 連線建立:握手後,連線建立。伺服器和客戶端保持持久的、開放的 TCP 連線。
- 全雙工通訊:一旦 WebSocket 連線打開,資料就可以同時來回傳送。伺服器和客戶端都可以隨時發起通訊。
- 關閉連線:當不再需要連線時,伺服器或用戶端都可以關閉連線。這將終止會話並釋放資源。
WebSocket 用例
- 聊天應用程式:WhatsApp 和 Slack 等即時訊息服務使用 WebSockets 在用戶之間進行即時訊息傳遞。
- 即時更新:WebSockets 為金融交易平台(股票價格)、體育比分或即時新聞提要等應用程式提供即時數據更新。
- 協作工具:WebSocket 可以在 Google Docs 或 Figma 等協作工具中實現即時更新,多個使用者可以同時編輯文件。
- 線上遊戲:多人遊戲依靠 WebSocket 進行即時玩家操作和互動。
- 物聯網和感測器資料:具有即時資料流的裝置(例如物聯網裝置、天氣感測器)使用 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中文網其他相關文章!

Tomergelistsinpython,YouCanusethe操作員,estextMethod,ListComprehension,Oritertools

在Python3中,可以通過多種方法連接兩個列表:1)使用 運算符,適用於小列表,但對大列表效率低;2)使用extend方法,適用於大列表,內存效率高,但會修改原列表;3)使用*運算符,適用於合併多個列表,不修改原列表;4)使用itertools.chain,適用於大數據集,內存效率高。

使用join()方法是Python中從列表連接字符串最有效的方法。 1)使用join()方法高效且易讀。 2)循環使用 運算符對大列表效率低。 3)列表推導式與join()結合適用於需要轉換的場景。 4)reduce()方法適用於其他類型歸約,但對字符串連接效率低。完整句子結束。

pythonexecutionistheprocessoftransformingpypythoncodeintoExecutablestructions.1)InternterPreterReadSthecode,ConvertingTingitIntObyTecode,whepythonvirtualmachine(pvm)theglobalinterpreterpreterpreterpreterlock(gil)the thepythonvirtualmachine(pvm)

Python的關鍵特性包括:1.語法簡潔易懂,適合初學者;2.動態類型系統,提高開發速度;3.豐富的標準庫,支持多種任務;4.強大的社區和生態系統,提供廣泛支持;5.解釋性,適合腳本和快速原型開發;6.多範式支持,適用於各種編程風格。

Python是解釋型語言,但也包含編譯過程。 1)Python代碼先編譯成字節碼。 2)字節碼由Python虛擬機解釋執行。 3)這種混合機制使Python既靈活又高效,但執行速度不如完全編譯型語言。

UseeAforloopWheniteratingOveraseQuenceOrforAspecificnumberoftimes; useAwhiLeLoopWhenconTinuingUntilAcIntiment.forloopsareIdealForkNownsences,而WhileLeleLeleLeleLeleLoopSituationSituationsItuationsItuationSuationSituationswithUndEtermentersitations。

pythonloopscanleadtoerrorslikeinfiniteloops,modifyingListsDuringteritation,逐個偏置,零indexingissues,andnestedloopineflinefficiencies


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。