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

深入解析 ZeroMQ 请求-应答模式:服务端实现与全链路测试指南 || 测试ZMQ重连重试机制

一、需求分析

        由于项目需要,先需要在按键按下时通过ZMQ发出按键请求,在收到ZMQ-REP时,表明按键有效按下,若超过3s仍未收到回复,则执行重发机制,超过3次则认为故障,进行日志记录。现需要测试该功能是否正常,需要通过Python模拟实现服务端来进行测试。

二、代码分析

# ================== 服务端代码 (rep_server.py)  ==================
import zmq  # ZeroMQ 核心库 - 实现高效网络通信
import json # JSON 处理库 - 用于数据序列化/反序列化def run_server():# 创建 ZeroMQ 上下文 (所有 socket 的容器)context = zmq.Context()# 创建 REP (Reply) 类型 socket - 遵循请求-应答模式socket = context.socket(zmq.REP) # 连接到客户端指定的地址 (实际生产中通常用 bind(),此处用 connect() 适用于指定设备场景)socket.connect("tcp://192.168.8.136:5592")# ✅ 最佳实践:生产环境建议服务端使用 bind(),客户端使用 connect()print("服务端已启动,等待客户端连接...")# 主服务循环 (持续处理请求)while True:try:# 🛑 阻塞接收客户端请求 (recv_json 自动进行 JSON 解析)message = socket.recv_json() print(f"收到请求: {message}")# 🔍 数据验证 (确保消息结构符合预期)if validate_message(message):# 🔁 原样返回数据 (演示基本应答逻辑)response = message socket.send_json(response) print("已发送应答数据")else:# ⚠️ 格式错误处理error_msg = {"error": "Invalid message format"}socket.send_json(error_msg) except json.JSONDecodeError:# ❌ JSON 解析异常处理error_msg = {"error": "Invalid JSON format"}socket.send_json(error_msg) except Exception as e:# 🚨 全局异常捕获error_msg = {"error": str(e)}socket.send_json(error_msg) # 🔐 消息验证函数 (确保数据结构完整性)
def validate_message(msg):return isinstance(msg, dict) and \           # 必须是字典类型"id" in msg and \                      # 必须包含消息ID"data" in msg and \                   # 必须包含数据段isinstance(msg["data"], dict) and \   # 数据段必须是字典"buttonIndex" in msg["data"] and \    # 包含按钮索引字段"value" in msg["data"]                # 包含数值字段if __name__ == "__main__":run_server()  # 🚀 启动服务端

三、实验结果及分析

        服务端:程序运行时收到请求控制台打印回复发送请求

        客户端:发送请求及未收到回复时重发机制及其记录

http://www.dtcms.com/a/506713.html

相关文章:

  • 五行八卦知识介绍和科学的关系
  • 做公司网站客户群体怎么找数据库怎么存储wordpress
  • 拉力猫指纹浏览器配置 Novproxy 代理 IP 教程:从参数设置到连接验证全流程
  • 深圳购物网站建设公司wordpress插件无法安装
  • 内网用户无法通过公网IP访问内网服务器:NAT回流问题
  • 【高并发服务器】Socket套接字类 Channel事件管理类设计与实现
  • Linux服务器编程实践52-SO_LINGER选项:控制close关闭TCP连接的行为
  • 【Docusaurus】子路径配置后,build 报错 Error: Unable to build website for locale en
  • wordpress 网站变慢深圳龙华邮政编码是多少
  • 【服务器】服务器被攻击植入了挖矿病毒,CPU一直占用100%,@monthly /root/.cfg/./dealer病毒清除
  • DevExpress WinForms v25.1亮点 - 电子表格组件、富文档编辑器全新升级
  • SVN冲突处理相关,标识 C 语言源文件(.c)的不同版本或冲突状态
  • 《掰开揉碎讲编程-长篇》重生之哈希表易如放掌
  • 【Python】绘制椭圆眼睛跟随鼠标交互算法配图详解
  • 【C++模版进阶】如何理解非类型模版参数、特化与分离编译?
  • 字符串专题总结:从模拟运算到模板掌握
  • 【Java链表】从概念结构到单向链表创建,增删查改全流程实战
  • 从C10K到Reactor:事件驱动,如何重塑高并发服务器的网络架构
  • 顺义做网站公司重庆企业网络推广软件
  • 淘宝怎么做网站郑州网站开发公
  • input + React自定义上传组件【可自定义拓展】
  • 「日拱一码」125 多层特征融合
  • 第六部分:VTK进阶(第164章 复合数据集 vtkMultiBlockDataSet 组织)
  • k8s(十一)HPA部署与使用
  • 【ReaLM】结合错误数据与课程学习 提升垂域效果
  • 通了网站建设宿迁网站定制
  • Git仓库推送到GitHub
  • 本地多语言切换具体操作代码
  • 济南建设主管部门网站短视频网站如何做推广
  • AWS US-East-1 区宕机