gitbobobo / StreamMusic

支持 Android、iOS、macOS、Windows 平台的 Subsonic/Navidrome/Jellyfin/Emby/AudioStation 客户端。
https://music.aqzscn.cn/
911 stars 33 forks source link

在切换网络形式后,无法自动切换主备线路 #591

Open Seameee opened 1 month ago

Seameee commented 1 month ago

Describe the bug (BUG 描述,多条问题请分别建立 issue) A clear and concise description of what the bug is. 我现在最新版本了,还是没法自动切换线路,明明主线路是内网地址,备线是外网线路,从Wi-Fi切到流量依然不会切换,无论是app内切换还是切换后退出app重新链接都无效,直接手动点击线路切换是正常的

To Reproduce (复现步骤,复现问题是处理问题的必要条件) Steps to reproduce the behavior:

  1. 使用可以连接内网线路的wifi打开app,此时使用线路为主线路(内网)

  2. 关闭wifi,再播放音乐即使已经无法获取,仍然不会切换备用线路(公网),此时查看网络连接,app依然在尝试访问内网地址,并且在回报超时后尝试几次内网连接,而并没有尝试访问备用线路 IMG_2266 IMG_2267

  3. 退出音流app,重新打开app,此时网络状态为可访问公网的流量状态,app依然在尝试访问主线,并没有去请求备线 IMG_2268

  4. 手动切换为备用线路,可以看到网络访问是正常的,歌曲也可以正常播放 IMG_2269

Expected behavior (期望行为) A clear and concise description of what you expected to happen. 主备线能够在访问超时后自动互相切换,如果实在难以实现,改成wifi下使用某条线路,流量使用某条线路也可以

Screenshots (截图) If applicable, add screenshots to help explain your problem.

Platform and Device Info (操作系统及设备信息)

Music Server Type (音乐服务器类型) Navidrome 0.53.1 (1ba390a7)

Additional context (额外信息) Add any other context about the problem here. 与这个issue #277 表现相同,我看到在1.2.9以后的版本据说已经修复,但实测我这里还是会出现这样的情况

shanhai2333 commented 1 month ago

我的还好,就是主线路切备用慢,但是备用切主线路倒是秒切换

Seameee commented 1 month ago

我的还好,就是主线路切备用慢,但是备用切主线路倒是秒切换

我这里就从来没触发成功过:(

gitbobobo commented 1 month ago

音流会优先连接主线路,只有主线路连接超时之后,才会尝试连接备用线路

Seameee commented 1 month ago

音流会优先连接主线路,只有主线路连接超时之后,才会尝试连接备用线路

问题是,已经连接超时了,仍然不会切换备线 IMG_2326 日志如下

gitbobobo commented 1 month ago

又试了一下,我这里可以自动切换,主线路切备用需要等待5秒的超时时间,备用切主线路基本上能连接到主线路就切换成功了。

你这里日志的报错不是超时错误,可能是代理软件直接断开连接了?试试关掉代理能否正常切换

Seameee commented 1 month ago

又试了一下,我这里可以自动切换,主线路切备用需要等待5秒的超时时间,备用切主线路基本上能连接到主线路就切换成功了。

你这里日志的报错不是超时错误,可能是代理软件直接断开连接了?试试关掉代理能否正常切换

关掉qx尝试了一下确实切换成功了,很奇怪不知道是qx的问题还是什么

gitbobobo commented 1 month ago

猜测是代理软件有自己的超时时间,小于音流目前设置的5s,导致连接提前断开了

Seameee commented 1 month ago

猜测是代理软件有自己的超时时间,小于音流目前设置的5s,导致连接提前断开了

我尝试调整了代理的检测超时时间到8s,显然并没有作用 很抱歉我并不是开发者,不是很能理解目前的主备线路切换逻辑。按我所在行业的逻辑来看,为什么不能考虑在网络发生变化或其他情况下,主备线都进行检测,如果主备线都通就优先主线,主备线仅有其中一方可用就切换到可用线路,都不可用就提示错误,如果有更多的线路就把其他线路视为前两个线路的备用,以此类推。 现在因为代理软件提前把无法访问的192.168.0.0类似的本地地址拦下了,音流app也能检测到该地址无法访问,不能因为超时时长在5s以内回报不能访问,就一直尝试,直到超时次数到达上限也没有切换备线尝试。 如果是我这样理解没有问题的话,这种逻辑显然是不合理的。因为我也并不是开发者所以可能很不专业,您可以参考着来

gitbobobo commented 1 month ago

音流会优先连接主线路,只有主线路连接超时之后,才会尝试连接备用线路

这就是音流的处理逻辑,且网络环境发生变化就会立即触发检测。你感受到的延迟只是在等待主线路的网络连接超时。

主备线路都检测会导致一个问题,在主备线路都能连接的情况下,音流会选择最先返回成功结果的线路作为当前线路,那么当前线路可能会由于线路的网络延迟而频繁切换,这样一是可能导致无法预期的问题出现,二是失去了优先使用主线路的功能。

不论如何,我会尝试在开启代理软件(其他软件,没有你这个软件)的情况尝试复现此问题,若能成功复现,想必是可以解决的。

Seameee commented 1 month ago

音流会优先连接主线路,只有主线路连接超时之后,才会尝试连接备用线路

这就是音流的处理逻辑,且网络环境发生变化就会立即触发检测。你感受到的延迟只是在等待主线路的网络连接超时。

主备线路都检测会导致一个问题,在主备线路都能连接的情况下,音流会选择最先返回成功结果的线路作为当前线路,那么当前线路可能会由于线路的网络延迟而频繁切换,这样一是可能导致无法预期的问题出现,二是失去了优先使用主线路的功能。

不论如何,我会尝试在开启代理软件(其他软件,没有你这个软件)的情况尝试复现此问题,若能成功复现,想必是可以解决的。

从qx里的网络日志里看,应该是连尝试备线都没有尝试,一直在访问那个只能内网访问的主线,期待能改善吧 我也尝试一下其他代理软件,看是qx的原因,还是整个iOS代理都会遇到这种情况