Python Websockets库的使用指南

 更新时间:2025年04月04日 08:58:19   作者:老胖闲聊  
python websockets库是一个用于创建WebSocket服务器和客户端的Python库,它提供了一种简单的方式来实现实时通信,支持异步和同步操作,并且易于使用,本文给大家介绍了Python Websockets库的使用指南,需要的朋友可以参考下

一、WebSocket 简介

WebSocket 是一种基于 TCP 的协议,支持全双工通信(服务器和客户端可以同时发送消息),适用于实时性要求高的场景(如聊天、实时数据监控、在线游戏等)。与 HTTP 不同,WebSocket 连接一旦建立,会保持持久化,避免了 HTTP 轮询的开销。

二、Python 的 websockets 库

websockets 是 Python 中用于构建 WebSocket 服务器和客户端的异步库,基于 asyncio 实现,支持高并发和低延迟通信。

安装

pip install websockets

三、完整代码示例

1. WebSocket 服务器

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 服务器
    """
    async with websockets.serve(handle_client, "localhost", 8765):
        print("服务器已启动,监听端口 8765...")
        await asyncio.Future()  # 永久运行

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

2. WebSocket 客户端

import asyncio
import websockets

async def client():
    """
    WebSocket 客户端实现
    """
    async with websockets.connect("ws://localhost:8765") as websocket:
        # 创建两个任务:一个接收消息,一个发送消息
        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):
    """
    接收服务器消息
    """
    async for message in websocket:
        print(f"\n收到消息: {message}")

async def send_messages(websocket):
    """
    发送用户输入的消息
    """
    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())

四、代码详解

服务器端

  1. connected_clients:使用集合保存所有活跃连接,便于广播。
  2. handle_client
    • 接受新连接并添加到集合。
    • 循环接收客户端消息,收到后调用 broadcast 广播。
    • 处理连接断开异常,确保客户端被移除。
  3. broadcast:使用 asyncio.gather 并发向所有客户端发送消息。
  4. start_server:启动服务器并永久运行。

客户端

  1. client:连接服务器并启动收发任务。
  2. receive_messages:循环接收服务器消息并打印。
  3. send_messages:读取用户输入,发送到服务器(run_in_executor 用于异步处理阻塞的 input)。

五、运行与测试

  • 启动服务器
python server.py
  • 启动多个客户端
python client.py
  • 测试:在任一客户端输入消息,所有客户端都会收到广播。

六、高级用法

  1. 消息协议:可定义 JSON 格式的消息,添加类型字段(如 {"type": "chat", "content": "Hello"})。
  2. 认证:在连接时验证 Token(通过 path 参数或首次握手消息)。
  3. 心跳机制:定期发送 Ping/Pong 保持连接活跃。
  4. 集成 FastAPI:结合 ASGI 框架提供 HTTP + WebSocket 混合服务。

七、应用场景

  1. 实时聊天应用
  2. 多人在线游戏
  3. 股票行情推送
  4. 物联网设备监控

八、总结

通过 websockets 库,可以轻松构建高性能的实时应用。本文提供的代码示例覆盖了服务器和客户端的基本实现,注释详细,可直接扩展用于实际项目。

到此这篇关于Python Websockets库的使用指南的文章就介绍到这了,更多相关Python Websockets库使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文掌握Python函数进阶:参数类型与返回值

    一文掌握Python函数进阶:参数类型与返回值

    本文介绍了Python函数的五种参数类型,包括位置参数、默认参数、可变位置参数、关键字参数和可变关键字参数,以及它们的应用场景和传递细节,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2026-05-05
  • Pytorch数据拼接与拆分操作实现图解

    Pytorch数据拼接与拆分操作实现图解

    这篇文章主要介绍了Pytorch数据拼接与拆分操作实现图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 基于Python实现数据库表结构导出工具

    基于Python实现数据库表结构导出工具

    这篇文章主要为大家详细介绍了如何基于Python实现将数据库表结构导出到 Word 文档的实用工具,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04
  • python如何爬取网站数据并进行数据可视化

    python如何爬取网站数据并进行数据可视化

    这篇文章主要介绍了python爬取拉勾网数据并进行数据可视化,爬取拉勾网关于python职位相关的数据信息,并将爬取的数据已csv各式存入文件,然后对csv文件相关字段的数据进行清洗,并对数据可视化展示,包括柱状图展示、直方图展示,需要的朋友可以参考下
    2019-07-07
  • PyCharm远程调试代码配置以及运行参数设置方式

    PyCharm远程调试代码配置以及运行参数设置方式

    这篇文章主要介绍了PyCharm远程调试代码配置以及运行参数设置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • pandas实现按行遍历dataframe的方法(itertuples,iterrows)

    pandas实现按行遍历dataframe的方法(itertuples,iterrows)

    本文主要介绍了pandas实现按行遍历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)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法
    2022-11-11
  • Python实现自动化处理PDF文件的方法详解

    Python实现自动化处理PDF文件的方法详解

    这篇文章主要为大家详细介绍了如何使用Python完成简单的PDF文件处理操作,如PDF文件的批量合并、拆分、加密以及添加水印等,需要的可以参考一下
    2022-09-09
  • pandas中ix的使用详细讲解

    pandas中ix的使用详细讲解

    这篇文章主要介绍了pandas中ix的使用详细讲解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03

最新评论