Akegarasu / blivedm-go

go 版 b站/bilibili 直播/bili直播 弹幕库 - websocket协议
MIT License
80 stars 14 forks source link

重复输出level=info msg=reconnect日志的bug #14

Closed youngkzz closed 1 year ago

youngkzz commented 1 year ago

在跑demo的时候重复出现level=info msg=reconnect日志,进程一直不能正常工作,排查发现当websocket.DefaultDialer.Dial所作用的弹幕服务器在调用ReadMessage失败时,会触发reconnect,而reconnect并不会更换弹幕服务器,从而导致一直在reconnect不能正常工作 image

解决方案:retryCount改为全局变量

Akegarasu commented 1 year ago

这和弹幕服务器无关,是你ip临时被拉黑

youngkzz commented 1 year ago

这和弹幕服务器无关,是你ip临时被拉黑

当返回的Hostlist中第一个host不可用时,无论是IP临时被拉黑还是其他什么原因,都应该切换另一个host尝试重连,目前来看它不是这么工作的,实际上也因为没有切换的原因导致了我这边一直连不上。

Akegarasu commented 1 year ago

目前逻辑是 reconnect 应该重连当前服务器,connect dial 产生失败时表明服务器不可用时才会切换,it's designed 如果你连接到一个服务器,因为自身网络波动断开连接,而自动换了一个服务器不是很奇怪吗 原因就是目前无法检测到是自身网络不可达还是被服务器拉黑,所以才这么设计

youngkzz commented 1 year ago

目前逻辑是 reconnect 应该重连当前服务器,connect dial 产生失败时表明服务器不可用时才会切换,it's designed 如果你连接到一个服务器,因为自身网络波动断开连接,而自动换了一个服务器不是很奇怪吗

嗯,我觉得你说的有道理,但我不是很明白这块的机制,如果是网络问题reconnect后应该能恢复才对,但实际上只会重复reconnect,至少在网页端观看直播的时候不会出现这种情况,亦或是我直接页面刷新了没有发现。