Python websockets调整缩进后上下文管理器关闭连接报错原因咨询
问题根因
这个异常和你缩进是否正确没有关系,是WebSocket服务端主动断开了长连接,才触发了连接关闭的报错。
你第一种写法的逻辑是每次循环都新建一次WebSocket连接,发完消息就退出async with块自动断开连接,刚好适配了很多测试用WebSocket服务端「处理完单条消息就主动关闭连接」的逻辑,所以运行起来不会报错。
第二种写法复用同一个长连接循环发消息,当服务端处理完第一条消息主动断开连接后,第二次执行await ws.send()时会检测到连接已经被对端正常关闭,就会抛出ConnectionClosedOK异常,其中状态码1000就是对端正常关闭连接的标识。
常见触发原因
- 你用的测试服务端本身是单消息处理逻辑:收到一条消息返回后就直接关闭连接,不支持长连接
- 服务端配置了极短的空闲超时:你两次发消息间隔1秒,超过了服务端允许的最长空闲时间,触发了服务端的主动断连
解决方案
如果要实现长连接循环发消息的效果,需要对应调整服务端逻辑:
- 修改服务端代码,保持连接不主动关闭,适配长连接需求
- 如果服务端有空闲超时限制,可以在两次发消息的间隙发送ping包做连接保活
内容的提问来源于stack exchange,提问作者abraguez
相关产品推荐
相关产品推荐

