Skip to content

fix: 网络抖动时不再中断整个必应搜索会话 - #68

Open
wayner6 wants to merge 1 commit into
chiihero:V4-chinafrom
wayner6:pr/search-network-retry
Open

wayner6 wants to merge 1 commit into
chiihero:V4-chinafrom
wayner6:pr/search-network-retry

Conversation

@wayner6

@wayner6 wayner6 commented Nov 4, 2026

Copy link
Copy Markdown

问题

在国内网络下,必应搜索阶段偶发一次网络抖动就会让整个搜索会话直接结束,剩余的搜索积分当天拿不到。

实际日志(v4.3.2.4,2026-11-03):桌面端 60 分做到第 9 次搜索时出现一次 TLS 握手中断,随后会话退出,remaining=36 被放弃:

[ERROR] DESKTOP [GET-DASHBOARD-DATA] 获取仪表板数据失败(主接口与 Bing flyout 兜底均失败): Failed to connect to the server.
Reason: hyper_util::client::legacy::Error(Connect, Custom { kind: UnexpectedEof, error: "tls handshake eof" })
[ERROR] DESKTOP [SEARCH-BING] 搜索会话出错 | Failed to connect to the server. ...
[INFO]  DESKTOP [SEARCH-BING] 必应搜索完成 | 获得积分=24 | ... | 搜索次数=9 | remaining=36

原因

  1. 我这边账号的主仪表板接口每天都返回 Dashboard data missing from API response,因此运行期间一直走 Bing flyout 兜底;而 getFlyoutDashboardData 的请求写死了 retries: 0,一次连接错误就直接抛出。
  2. BrowserSearch.runSearchSession 循环里每次搜索后调用 tracker.measure() 查积分进度,这里抛出的异常被最外层 catch 接住,整个 while 循环退出。

改动

  • src/browser/BrowserFunc.ts:flyout 兜底请求改为 retries: 2。Http.send 对 4xx 永久错误本来就不重试,所以只会对连接类错误 / 5xx 做退避重试。
  • src/functions/activities/search/BrowserSearch.ts:把 Cookie 回写 + measure() 包进 try/catch。失败时打一条 WARN,本轮记为未得分(计入 stagnant,仍受 stagnantLimit 兜底),然后继续下一次搜索。PointsTracker.measure() 失败时不会更新 this.missing,下一次成功测量会把累计增量一起算回来,不会漏计积分。这个处理方式和 BonusTracker.measure() 现有的"失败返回 0"保持一致。

两处改动共 +14/-3 行,不涉及配置项。

验证

  • tsc 编译、eslint 通过
  • 本地实跑一次完整流程(中国区,单账号):阅读赚积分 10/10,桌面搜索 60/60(20 次),无报错。这次运行中没有出现网络抖动,所以新的重试和继续逻辑只验证了"不影响正常流程";如果以后真遇到抖动,日志会出现 查询积分进度失败,继续下一次搜索。

🤖 Generated with Claude Code

- Bing flyout 仪表板兜底请求从 retries: 0 改为 retries: 2,
  连接类错误(如 TLS 握手 EOF)可由 Http 层退避重试
- BrowserSearch 每次搜索后的积分测量失败时,只记为本轮未得分并继续,
  下一次成功测量会补算累计增量,不再因一次异常放弃剩余搜索积分

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

1 participant