最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python Websockets庫的使用指南

 更新時間:2025年04月04日 08:58:19   作者:老胖閑聊  
python websockets庫是一個用于創(chuàng)建WebSocket服務(wù)器和客戶端的Python庫,它提供了一種簡單的方式來實現(xiàn)實時通信,支持異步和同步操作,并且易于使用,本文給大家介紹了Python Websockets庫的使用指南,需要的朋友可以參考下

一、WebSocket 簡介

WebSocket 是一種基于 TCP 的協(xié)議,支持全雙工通信(服務(wù)器和客戶端可以同時發(fā)送消息),適用于實時性要求高的場景(如聊天、實時數(shù)據(jù)監(jiān)控、在線游戲等)。與 HTTP 不同,WebSocket 連接一旦建立,會保持持久化,避免了 HTTP 輪詢的開銷。

二、Python 的 websockets 庫

websockets 是 Python 中用于構(gòu)建 WebSocket 服務(wù)器和客戶端的異步庫,基于 asyncio 實現(xiàn),支持高并發(fā)和低延遲通信。

安裝

pip install websockets

三、完整代碼示例

1. WebSocket 服務(wù)器

import asyncio
import websockets
from datetime import datetime

# 保存所有活躍的客戶端連接
connected_clients = set()

async def handle_client(websocket, path):
    """
    處理單個客戶端連接
    """
    # 將新客戶端添加到集合
    connected_clients.add(websocket)
    try:
        async for message in websocket:
            # 廣播消息給所有客戶端
            timestamp = datetime.now().strftime("%H:%M:%S")
            broadcast_message = f"[{timestamp}] {message}"
            await broadcast(broadcast_message)
    except websockets.exceptions.ConnectionClosed:
        print("客戶端斷開連接")
    finally:
        # 客戶端斷開后移除
        connected_clients.remove(websocket)

async def broadcast(message):
    """
    向所有連接的客戶端廣播消息
    """
    if connected_clients:
        await asyncio.gather(
            *[client.send(message) for client in connected_clients]
        )

async def start_server():
    """
    啟動 WebSocket 服務(wù)器
    """
    async with websockets.serve(handle_client, "localhost", 8765):
        print("服務(wù)器已啟動,監(jiān)聽端口 8765...")
        await asyncio.Future()  # 永久運行

if __name__ == "__main__":
    asyncio.run(start_server())

2. WebSocket 客戶端

import asyncio
import websockets

async def client():
    """
    WebSocket 客戶端實現(xiàn)
    """
    async with websockets.connect("ws://localhost:8765") as websocket:
        # 創(chuàng)建兩個任務(wù):一個接收消息,一個發(fā)送消息
        receive_task = asyncio.create_task(receive_messages(websocket))
        send_task = asyncio.create_task(send_messages(websocket))
        await asyncio.gather(receive_task, send_task)

async def receive_messages(websocket):
    """
    接收服務(wù)器消息
    """
    async for message in websocket:
        print(f"\n收到消息: {message}")

async def send_messages(websocket):
    """
    發(fā)送用戶輸入的消息
    """
    while True:
        message = await asyncio.get_event_loop().run_in_executor(None, input, "輸入消息 (輸入 'exit' 退出): ")
        if message.strip().lower() == 'exit':
            break
        await websocket.send(message)

if __name__ == "__main__":
    asyncio.run(client())

四、代碼詳解

服務(wù)器端

  1. connected_clients:使用集合保存所有活躍連接,便于廣播。
  2. handle_client
    • 接受新連接并添加到集合。
    • 循環(huán)接收客戶端消息,收到后調(diào)用 broadcast 廣播。
    • 處理連接斷開異常,確保客戶端被移除。
  3. broadcast:使用 asyncio.gather 并發(fā)向所有客戶端發(fā)送消息。
  4. start_server:啟動服務(wù)器并永久運行。

客戶端

  1. client:連接服務(wù)器并啟動收發(fā)任務(wù)。
  2. receive_messages:循環(huán)接收服務(wù)器消息并打印。
  3. send_messages:讀取用戶輸入,發(fā)送到服務(wù)器(run_in_executor 用于異步處理阻塞的 input)。

五、運行與測試

  • 啟動服務(wù)器
python server.py
  • 啟動多個客戶端
python client.py
  • 測試:在任一客戶端輸入消息,所有客戶端都會收到廣播。

六、高級用法

  1. 消息協(xié)議:可定義 JSON 格式的消息,添加類型字段(如 {"type": "chat", "content": "Hello"})。
  2. 認證:在連接時驗證 Token(通過 path 參數(shù)或首次握手消息)。
  3. 心跳機制:定期發(fā)送 Ping/Pong 保持連接活躍。
  4. 集成 FastAPI:結(jié)合 ASGI 框架提供 HTTP + WebSocket 混合服務(wù)。

七、應(yīng)用場景

  1. 實時聊天應(yīng)用
  2. 多人在線游戲
  3. 股票行情推送
  4. 物聯(lián)網(wǎng)設(shè)備監(jiān)控

八、總結(jié)

通過 websockets 庫,可以輕松構(gòu)建高性能的實時應(yīng)用。本文提供的代碼示例覆蓋了服務(wù)器和客戶端的基本實現(xiàn),注釋詳細,可直接擴展用于實際項目。

到此這篇關(guān)于Python Websockets庫的使用指南的文章就介紹到這了,更多相關(guān)Python Websockets庫使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文掌握Python函數(shù)進階:參數(shù)類型與返回值

    一文掌握Python函數(shù)進階:參數(shù)類型與返回值

    本文介紹了Python函數(shù)的五種參數(shù)類型,包括位置參數(shù)、默認參數(shù)、可變位置參數(shù)、關(guān)鍵字參數(shù)和可變關(guān)鍵字參數(shù),以及它們的應(yīng)用場景和傳遞細節(jié),本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2026-05-05
  • Pytorch數(shù)據(jù)拼接與拆分操作實現(xiàn)圖解

    Pytorch數(shù)據(jù)拼接與拆分操作實現(xiàn)圖解

    這篇文章主要介紹了Pytorch數(shù)據(jù)拼接與拆分操作實現(xiàn)圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • 基于Python實現(xiàn)數(shù)據(jù)庫表結(jié)構(gòu)導(dǎo)出工具

    基于Python實現(xiàn)數(shù)據(jù)庫表結(jié)構(gòu)導(dǎo)出工具

    這篇文章主要為大家詳細介紹了如何基于Python實現(xiàn)將數(shù)據(jù)庫表結(jié)構(gòu)導(dǎo)出到 Word 文檔的實用工具,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • python如何爬取網(wǎng)站數(shù)據(jù)并進行數(shù)據(jù)可視化

    python如何爬取網(wǎng)站數(shù)據(jù)并進行數(shù)據(jù)可視化

    這篇文章主要介紹了python爬取拉勾網(wǎng)數(shù)據(jù)并進行數(shù)據(jù)可視化,爬取拉勾網(wǎng)關(guān)于python職位相關(guān)的數(shù)據(jù)信息,并將爬取的數(shù)據(jù)已csv各式存入文件,然后對csv文件相關(guān)字段的數(shù)據(jù)進行清洗,并對數(shù)據(jù)可視化展示,包括柱狀圖展示、直方圖展示,需要的朋友可以參考下
    2019-07-07
  • PyCharm遠程調(diào)試代碼配置以及運行參數(shù)設(shè)置方式

    PyCharm遠程調(diào)試代碼配置以及運行參數(shù)設(shè)置方式

    這篇文章主要介紹了PyCharm遠程調(diào)試代碼配置以及運行參數(shù)設(shè)置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • pandas實現(xiàn)按行遍歷dataframe的方法(itertuples,iterrows)

    pandas實現(xiàn)按行遍歷dataframe的方法(itertuples,iterrows)

    本文主要介紹了pandas實現(xiàn)按行遍歷dataframe的方法,主要介紹了兩種itertuples,iterrows,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • 解決python nohup linux 后臺運行輸出的問題

    解決python nohup linux 后臺運行輸出的問題

    今天小編就為大家分享一篇解決python nohup linux 后臺運行輸出的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python?遺傳算法處理TSP問題詳解

    Python?遺傳算法處理TSP問題詳解

    遺傳算法(Genetic?Algorithm,?GA)是模擬達爾文生物進化論的自然選擇和遺傳學(xué)機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜索最優(yōu)解的方法
    2022-11-11
  • Python實現(xiàn)自動化處理PDF文件的方法詳解

    Python實現(xiàn)自動化處理PDF文件的方法詳解

    這篇文章主要為大家詳細介紹了如何使用Python完成簡單的PDF文件處理操作,如PDF文件的批量合并、拆分、加密以及添加水印等,需要的可以參考一下
    2022-09-09
  • pandas中ix的使用詳細講解

    pandas中ix的使用詳細講解

    這篇文章主要介紹了pandas中ix的使用詳細講解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03

最新評論

江达县| 武汉市| 永泰县| 长武县| 深泽县| 花莲市| 漳州市| 临海市| 磐石市| 临泉县| 延津县| 桃园县| 绥阳县| 海丰县| 江油市| 长沙市| 潢川县| 南川市| 莲花县| 焉耆| 横峰县| 黑河市| 镇原县| 重庆市| 兴业县| 黄浦区| 昌吉市| 广宁县| 云林县| 清流县| 扶风县| 巴彦淖尔市| 扶余县| 东方市| 呼图壁县| 乌兰浩特市| 宜宾县| 喀喇| 商河县| 桂平市| 昆明市|