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

如何确认Python中客户端是否收到了服务端的消息

在Python中客户端是否收到了服务端的消息服务端自己是不清楚的那就可能有一个很糟糕的情况了服务端向客户端发送的数据不幸丢失了客户端没有收到服务端以为数据已经被对方接受了而客户端还在傻傻等着。怎么办呢我们想办法优化一下程序规定在客户端接受到订单送达的消息之后就要向服务端发送“我已收到谢谢”当然这在现实中很多人懒得这么做服务端看到这条消息才能证明客户确实是收到骑手送的餐品了如果超过 10 秒没有收到消息那就重新发送消息进行重试如果过了 10 秒还是没有收到客户端确认的消息就再次重试重试的最大次数为 5 次。要想实现这个功能需要用到一个特别的网络库 —— eventlet。eventlet 是一个用来处理和网络相关的 python 库函数而且可以通过协程来实现并发在 eventlet 里把 “协程” 叫做 greenthread(绿色线程)。所谓并发就是开启了多个 greenthread并且对这些 greenthread 进行管理以实现非阻塞式的 I/O。我们需要用到 eventlet.Timeout() 这个函数控制程序的超时时间当程序在这段时间内没有执行完成就会抛出异常这样在程序中遇到了异常就做相应的异常处理就避免了阻塞的情况。改进之后的服务端代码实现如下import time from socket import * import eventlet eventlet.monkey_patch() #用于绿化一些python的模块 serverSocketsocket(AF_INET,SOCK_STREAM) #创建套接字对象 serverSocket.bind((127.0.0.1,6666)) #绑定IP和端口必须是元组形势 serverSocket.listen(1) #设置连接池挂起的数量 try: connectionSocket,addrserverSocket.accept() #接受客户端连接connectionSocket是客户端连接服务器的信号addr是客户端地址 print(收到addr[0]:str(addr[1])的订单) time.sleep(10) #让线程等待10秒 connectionSocket.send(bytes(您的订单已送达, encodingutf-8)) # 向客户端发送消息 for i in range(0,5): teventlet.Timeout(10,False) #设置超时时间为10秒 try: recv_dataconnectionSocket.recv(1024) print(收到消息断开连接...) break except eventlet.timeout.Timeout as e: print(超时重试中...) connectionSocket.send(bytes(您的订单已送达, encodingutf-8)) # 向客户端发送消息 finally: t.cancel() #终止进程 connectionSocket.close() #断开连接 except IOError: connectionSocket.close() serverSocket.close() #关闭套接字对象服务端程序运行后正常执行客户端程序运行截图如下
http://www.zskr.cn/news/1302794.html

相关文章:

  • 如何免费实现百度网盘高速下载:开源工具终极实用指南
  • Nestia:基于TypeScript编译时分析的NestJS端到端类型安全实践
  • Emacs AI编程助手:ai-code-interface.el深度集成指南
  • Godot 4网络同步框架MonkeNet:组件化架构与权威服务器实践
  • 工厂的招工动态能看出哪些经营信息?一份给上游销售员的信号解读手册
  • 猫抓扩展完整指南:三步掌握浏览器视频嗅探与下载技巧
  • Go语言实现跨平台系统更新检查器:自动化运维与安全监控实践
  • 父类 = new 子类,编译看左面,运行看右面,这是多态的精髓与必要性。为啥不写成子类 = new 子类?一文详解
  • DLSS Swapper:游戏性能优化的智能管家,释放显卡潜能的终极利器
  • dotai:AI驱动的终端助手,无缝集成命令行工作流
  • 2026浙江中铁标准抑尘剂生产厂家好用推荐 - 品牌排行榜
  • 全桥开关电源实验板深度解析:从硬件架构到波形测量与故障排查
  • 解析开源协作平台tonl:从脚手架到CI/CD的现代Web开发工具链设计
  • LinuxAppArmor策略异常定位实战
  • 书成紫微动,律定凤凰驯:从破到立,《第一大道》如何为《凰标》铺就道韵根基
  • JetBrains IDE 30天试用重置:一键解决方案的完整实践指南
  • 2026年实测|8款初稿降AIGC率工具:提升原创度红黑榜 - 降AI实验室
  • 开源技能库构建指南:Git+Markdown+Docsify打造个人技术知识体系
  • 基于Plan 9与Lua的9router:构建统一命名空间的网络服务框架
  • 末次月经一填,预产期心里有个谱
  • 基于MCP协议构建视频理解AI应用:vidnavigator-mcp-starter实战指南
  • 用C++和Eigen手撸一个MINCO轨迹优化器:从论文公式到避障实战(附代码)
  • 联发科芯片调试终极指南:MTKClient专业级开发实战
  • UABEA:解决Unity跨平台资源管理三大痛点的开源工具实践
  • 阴阳师自动化助手OAS:免费解放双手的终极游戏管家
  • CircuitPython入门:从GPIO到NeoPixel的嵌入式开发实践
  • 从零构建本地化AI代码助手:架构、微调与工程实践
  • 开放CLI架构解析:从命令行到智能交互中心的演进之路
  • Seraphine:英雄联盟智能BP助手与游戏数据查询工具
  • Arm Iris仿真框架:参数化设计与验证实践