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

基于Python Websockets的客户端程序,能够连接服务端、处理ping/pong、发送订阅请求并保持长连接

以下是一个基于Python Websockets的客户端程序,能够连接服务端、处理ping/pong、发送订阅请求并保持长连接:

import asyncio
import websockets
import json
import time
import logging
import traceback
from datetime import datetime, timedelta# 配置日志
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s',handlers=[logging.FileHandler("websocket_client.log"),logging.StreamHandler()]
)
logger = logging.getLogger(__name__)class WebSocketClient:def __init__(self, uri, subscribe_message, max_reconnect_attempts=5):self.uri = uriself.subscribe_message = subscribe_messageself.max_reconnect_attempts = max_reconnect_attemptsself.reconnect_delay = 5  # 初始重连延迟(秒)self.last_message_time = time.time()self.connection_active = Falseself.websocket = Noneself.message_counter = 0self.ping_counter = 0self.pong_counter = 0async def connect(self):"""建立WebSocket连接并保持活动状态"""reconnect_attempts = 0while True:try:logger.info(f"Connecting to {self.uri}")async with websockets.connect(self.uri,ping_interval=20,  # 发送底层ping的间隔ping_timeout=15,   # 等待pong的超时时间close_timeout=5    # 关闭超时) as websocket:self.websocket = websocketself.connection_active = Truereconnect_attempts = 0self.reconnect_delay = 5logger.info("Connection established. Sending subscribe message...")await self.send_subscribe()# 启动消息处理任务await self.handle_messages()except (websockets.ConnectionClosed, ConnectionRefusedError) as e:logger.warning(f"Connection closed: {e}")self.connection_active = Falseexcept Exception as e:logger.error(f"Unexpected error: {str(e)}")logger.debug(traceback.format_exc())self.connection_active = Falsefinally:# 重连逻辑if reconnect_attempts 
http://www.lqws.cn/news/480061.html

相关文章:

  • 《算法笔记》之二(笔记)
  • 基于split-Bregman算法的L1正则化matlab仿真,对比GRSR算法
  • RA4M2开发IOT(8)----IIC驱动OLED
  • 分库分表下的 ID 冲突问题与雪花算法讲解
  • Qt项目,记事本
  • YOLOv8/11自定义seg分割数据集格式转换json2txt
  • 第八章 目录一致性协议 A Primer on Memory Consistency and Cache Coherence - 2nd Edition
  • 如何用AI开发完整的小程序<10>—总结
  • unity版本控制PlasticSCM转git
  • 需求初步探讨-从OR-AR
  • 《Redis》事务
  • 抽象工厂设计模式
  • 查询消耗 IO 多的 SQL -达梦
  • 一个免费的视频、音频、文本、图片多媒体处理工具
  • 数据库高性能应用分析报告
  • 鸿蒙 Column 组件指南:垂直布局核心技术与场景化实践
  • Python爬虫实战:研究Ghost.py相关技术
  • 【深度学习与机器学习的区别】从本质到应用的全景对比
  • 单例模式-Python示例
  • 多设备Obsidian笔记同步:WebDAV与内网穿透技术高效实现教程
  • 探秘Flink Connector加载机制:连接外部世界的幕后引擎
  • 考研408《计算机组成原理》复习笔记,第三章(1)——存储系统概念
  • 【数据结构试题】
  • 【JS-4.4-键盘常用事件】深入理解DOM键盘事件:提升用户交互体验的关键
  • idea——AI时代学习python的必要性
  • 学习打卡---回溯
  • linux jq命令详解
  • 基于深度学习的智能图像风格迁移系统:技术与实践
  • Spring AI 项目实战(十一):Spring Boot +AI + DeepSeek 开发智能教育作业批改系统(附完整源码)
  • 华为云Flexus+DeepSeek征文|华为云 Dify 高可用部署教程:CCE 容器集群一键构建企业级智能应用