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

WebSocket客户端无法接收服务器消息(握手正常、服务器可收消息)

问题解决方案

1. 修复服务器消息发送逻辑

你的服务器代码存在核心逻辑错误:await websocket.send(...) 被放在了async for message in websocket循环的外部。这个循环会持续监听客户端发来的消息,直到连接关闭,导致send语句永远无法执行。需要将发送逻辑移到循环内部,在处理完客户端的初始"01"类型消息后立即触发:

修改后的服务器handler函数:

async def handler(websocket, path) :
    current = None
    print("handling something")
    try :
        async for message in websocket :
            parsedClientMessage = json.loads(message)
            print(parsedClientMessage)
            if parsedClientMessage["type"] == "01" :
                parsedClientData = parsedClientMessage['message']
                current = parsedClientData['username'] if isinstance(parsedClientData, dict) and parsedClientData['username'] in Read(storage) else id(websocket)
                if current not in clients :
                    clients[current] = {}
                clients[current][id(websocket)] = websocket
                # 处理完客户端初始消息后立即发送欢迎消息
                await websocket.send(json.dumps(["connect", "Welcome to TerminalSaturn!", id(websocket)]))

    except Exception as e :
        print(e)
    finally: 
        print(f"closed connection")
        if current in clients :
            if len(clients[current]) == 1 :
                del clients[current] 
            else :
                del clients[current][id(websocket)] 

2. 修复消息格式不匹配问题

服务器直接发送Python列表,但WebSocket要求传输字符串/二进制数据,客户端会用JSON.parse解析消息,因此必须用json.dumps()将列表转为JSON字符串,否则客户端会解析失败,无法识别消息。

3. 验证家用服务器的网络配置

  • 确认路由器端口转发规则:将外部1111端口正确转发至服务器内部1111端口(WSS未使用默认443端口,需确保端口一致)
  • 若使用Nginx反向代理WebSocket,需添加WebSocket专属配置,避免Nginx主动断开连接:
location / {
    proxy_pass https://localhost:1111;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
}

关于1001错误码的说明

received 1001 (going away)是正常行为,当页面刷新或关闭时,客户端会主动发送断开连接的帧,服务器收到该帧属于预期流程,与消息接收异常无关。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:46:20