You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Websocket备份文件服务器收1条消息后停止响应求助

问题修复方案

1. Python客户端发单条消息后服务端假死修复

你最早版本的连接处理函数逻辑冲突:外层while True死循环和内层async for遍历websocket消息的逻辑重复,async for本身就会持续监听连接直到断开,两层嵌套导致接收流程异常,收一条消息后就卡住。
你后续简化的版本逻辑已经正确,推荐用更简洁的async for写法,同时增加回包逻辑避免客户端超时:

async def handle_connectio(websocket, path):
    try:
        async for data in websocket:
            print(f"<<< {data}")
            # 可选:给客户端返回接收确认,避免部分客户端等待响应超时
            await websocket.send(f"recv success: {data}")
    except websockets.exceptions.ConnectionClosed:
        print("连接已正常断开")

注意:不要在协程内直接调用quit()终止进程,单个连接断开只要退出当前处理函数即可,不会影响其他客户端连接。如果要停止整个服务,需要操作事件循环停止。

2. C++客户端消息无法接收修复

该问题和服务端try逻辑无关,是C++侧的websocket实现问题:

  • 如果你C++端直接用原生TCP socket发裸数据,没有完成websocket标准握手、数据帧封装流程,Python的websockets库会直接丢弃无效数据,不会触发接收回调
  • 排查建议:
    • 确认C++端使用标准websocket库(如Boost.Beast、libwebsockets)实现通信,而非裸TCP连接
    • 确认C++端的websocket握手请求成功,没有被服务端主动断开
    • 必要时可抓包验证C++端发送的数据包格式符合websocket协议标准

可选方案:切换原生TCP实现

如果只是用于内网备份文件传输,不需要浏览器兼容,原生TCP socket的实现更简单,没有websocket的帧开销,更适合大文件传输场景。

内容的提问来源于stack exchange,提问作者lightshadown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:15:02