当前位置: 首页 > news >正文

websockets库使用(基于Python)

主要参考资料:
【Python】websockets库的介绍及用法: https://blog.csdn.net/qq_53871375/article/details/135920231
python模块websockets,浏览器与服务器之间的双向通信: https://blog.csdn.net/randy521520/article/details/134752051

目录

  • websockets库
    • 创建 WebSocket 服务器
    • 创建 WebSocket 客户端
    • 广播消息
    • SSL/TLS 加密

websockets库

websockets库 是一个基于 asyncio 的 Python 库,旨在提供简单易用的 WebSockets 服务器和客户端功能。有如下特性:

  • 简单易用:提供简洁的 API,方便快速上手。
  • 基于 asyncio:利用 Python 的 asyncio 库实现异步 I/O 操作,支持高并发。
  • 全双工通信:支持在单个连接上同时进行数据发送和接收。
  • 支持多种协议:兼容 WebSocket 协议,支持 SSL/TLS 加密。
  • 灵活扩展:支持自定义协议和中间件,方便扩展功能。

创建 WebSocket 服务器

可以使用 websockets.serve 创建一个简单的 WebSocket 服务器:
websockets.serve(): 这个函数负责创建并启动一个WebSocket服务器。
websocket.recv(): 这个函数是一个协程函数,用于从WebSocket接收消息。
websocket.send(): 这个函数是一个协程函数,用于向WebSocket发送消息。

import asyncio
import websocketsasync def hello(websocket, path):name = await websocket.recv()print(f"< {name}")greeting = f"Hello {name}!"await websocket.send(greeting)print(f"> {greeting}")start_server = websockets.serve(hello, "localhost", 8765)asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

创建 WebSocket 客户端

可以使用 websockets.connect 创建一个简单的 WebSocket 客户端:
websockets.connect(): 这个函数负责创建一个 WebSocket 客户端。
websocket.close(): 关闭 WebSocket 连接。
websockets.exceptions: 提供了WebSocket特定的异常。如:ConnectionClosed、InvalidHandshake、InvalidOrigin等。

import asyncio
import websocketsasync def hello():uri = "ws://localhost:8765"async with websockets.connect(uri) as websocket:await websocket.send("Hello, World!")response = await websocket.recv()print(f"< {response}")asyncio.get_event_loop().run_until_complete(hello())

广播消息

可以实现消息广播功能,将消息发送给所有连接的客户端:

import asyncio
import websocketsconnected_clients = set()async def handler(websocket, path):connected_clients.add(websocket)try:async for message in websocket:await asyncio.wait([client.send(message) for client in connected_clients])finally:connected_clients.remove(websocket)start_server = websockets.serve(handler, "localhost", 8765)asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

SSL/TLS 加密

可以为 WebSocket 服务器添加 SSL/TLS 加密,确保数据传输安全:

import asyncio
import ssl
import websocketsssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.load_cert_chain(certfile="path/to/certfile", keyfile="path/to/keyfile")async def echo(websocket, path):async for message in websocket:await websocket.send(message)start_server = websockets.serve(echo, "localhost", 8765, ssl=ssl_context)asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
http://www.lryc.cn/news/452867.html

相关文章:

  • Electron 主进程与渲染进程、预加载preload.js
  • 鸿蒙harmonyos next纯flutter开发环境搭建
  • 【学习资源】人在环路的机器学习
  • 计算机毕业设计 基于Python的热门微博数据可视化分析系统的设计与实现 Python+Django+Vue 可视化大屏 附源码 讲解 文档
  • 031集——文本文件按空格分行——C#学习笔记
  • LabVIEW 成绩统计系统
  • SpringBoot技术栈:构建高效古典舞交流平台
  • Docker 容器日志记录与管理:日志输出、轮转与配置实践
  • Django学习笔记一:MVT的示例
  • 集合框架01:集合的概念、Collection体系、Collection接口
  • shadcn-vue 快速开始
  • 智慧管控平台技术解决方案
  • 酒店业CRM和酒店数据管理大数据—未来之窗行业应用跨平台架构
  • 滚雪球学Oracle[8.1讲]:高级主题与未来趋势
  • 【Matlab绘图】从Excel导入表格并进行三维绘图
  • IDEA里面的长截图插件
  • (15)衰落信道模型作用于信号是相乘还是卷积
  • (C语言贪吃蛇)14.用绝对值方式解决不合理的走位
  • [深度学习]基于YOLO高质量项目源码+模型+GUI界面汇总
  • 仕考网:公务员国考有三不限岗位吗?
  • RabbitMq生产者可靠性
  • Linux Debian12使用Podman安装bwapp靶场环境
  • 小白快速上手 Docker 02 | Docker 容器生命周期
  • 深刻理解Redis集群(下):Redis 哨兵(Sentinel)模式
  • STM32重启源深度解析
  • windows配置C++编译环境和VScode C++配置(保姆级教程)
  • 【微信小程序前端开发】入门Day03 —— 页面导航、事件、生命周期、WXS 脚本及自定义组件
  • 【51单片机】点亮LED之经典流水灯
  • 深度学习数据增强的常用方法
  • 影院管理新篇章:小徐的Spring Boot应用