Skip to content

Conversation

@HeiLAAS
Copy link
Contributor

@HeiLAAS HeiLAAS commented Mar 12, 2025

No description provided.

@xiyaowong
Copy link
Collaborator

没看懂修复的原理是啥?

@HeiLAAS
Copy link
Contributor Author

HeiLAAS commented Mar 13, 2025

没看懂修复的原理是啥?

我也不知道,我想看他抛出报错,但是添加了raise之后也没报错,而且必须要2个raise都在,不然就不起效

@xiyaowong
Copy link
Collaborator

Debug一下他断开连接的时候具体抛的错误。

@HeiLAAS
Copy link
Contributor Author

HeiLAAS commented Mar 18, 2025

捕获了一个错误
ERROR WebSocket 连接关闭: 1006,

@HeiLAAS
Copy link
Contributor Author

HeiLAAS commented Mar 18, 2025

捕获了一个错误 ERROR WebSocket 连接关闭: 1006,
连接关闭: 1006 - sent 1007 (invalid frame payload data); no close frame received

@HeiLAAS HeiLAAS changed the title 修复重连之后botoy自动退出的bug fix(client): Fix crash when receiving long messages Mar 19, 2025
@falcon-hayaki
Copy link
Contributor

我这边在未使用守护进程时也出现了类似的主进程静默退出情况。
关于 @HeiLAAS 提到的长字符串问题,我尝试了多种长文本和大图都未能复现,所以暂时找不到触发断连的源头。不过,注意到了 wait 函数中可能存在一个逻辑隐患:

    async def _handle_reconnect(self):
        logger.info("准备重连中...")
        try:
            await self.connect()
        except:
            pass
        else:
            self.reconnect_task = None

    async def wait(self):
        while True:
            if not self.ws:
                break
            await self.ws.wait_closed()
            await asyncio.sleep(1)
            if not self.reconnect_task:
                break
            await self.reconnect_task
            if self.state != "connected":
                break

代码在捕获断连后会休眠 1 秒。怀疑如果重连操作非常快(在 1 秒内完成),self.reconnect_task 会被重置为 None,导致休眠结束后直接命中 if not self.reconnect_task: break 的逻辑,从而意外退出主程序。
由于无法稳定复现断连的情况,以上仅为基于代码逻辑的推测。如果 @HeiLAAS 能稳定复现该问题,麻烦测试一下修复此逻辑后是否还有问题。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants