网络恢复了,为什么 App 反而更容易出问题?

逆向工程、设计恢复、再工程、重构的简单易懂的理解 摘要: 逆向工程、设计恢复、再工程和重构是改进软件系统的不同方法。逆向工程旨在理解系统原理(如拆解收音机分析电路),不改变功能;设计恢复提取高层设计(如归纳模块架构);再工程改造系统以增强功能(如替换电路板支持蓝牙);重构仅优化内部结构(如整理布线)。逆向工程和设计恢复是再工程的基础,而再工程通常包含重构。选择方法取决于目标:理解系统、恢复设计、功能升级或内部优化。 阅读详情

手机在电梯里断了几十秒网络。门一开,信号回来了,页面也终于动了。

然后事情开始不对劲:两条相同的消息一起出现,上传进度从 70% 跳回 0%,刚刷新出来的新数据又被旧页面盖掉。服务端监控那边也突然冒出一小波请求。

断网时大家只是等,网络恢复后,积压的事情同时醒了。

很多弱网问题并不发生在最差的那几秒。真正混乱的时间,往往是恢复后的半分钟。

网络恢复不是按下一个开关

手机重新显示 5G 或 Wi-Fi,只说明当前有一条网络通道可用。之前建立的连接未必还能继续,等待中的请求也不会自动获得正确答案。

有的请求已经失败,有的仍在等待超时,还有的其实被服务器处理完了,只是响应没能回来。与此同时,页面刷新、后台同步和用户手动点击都可能发起新请求。

这些任务属于不同时间,却挤在网络刚恢复的几秒里执行。App 如果只监听到一句“网络已连接”,然后把所有事情重新来一遍,重复和乱序几乎是迟早的事。

超时不等于服务端什么都没做

还是用付款来举例。

用户点击付款,请求成功到达服务器,服务器完成扣款。返回结果时网络断了,App 等到超时,只能显示失败。

网络恢复后,如果 App 直接重发付款请求,第二次扣款就有可能发生。用户看到的只是一次转圈和一次重试,系统里却出现了两次写操作。

下单、发评论、领取优惠券都有类似风险。只要操作会改变服务端状态,就不能把“没收到响应”当成“服务端没执行”。

处理这类情况,通常需要给一次业务操作稳定的身份。重试时仍然表示“刚才那一单”,服务端识别出它已经处理过,就返回原来的结果。支付超时后,App 也应该优先查询订单状态,而不是重新创建付款。

用户不需要知道这套机制的名字。他只在乎一件事:别让我点一次,系统做两次。

旧响应可能比新响应更晚回来

恢复期还有一种很常见的问题:返回顺序乱了。

假设用户先搜索“北京”,网络卡住后又改成搜索“上海”。第二个请求走新连接,很快返回上海的结果;第一个请求经过重传,过几秒才回来。如果页面谁最后返回就显示谁,用户明明输入上海,眼前却变回了北京。

请求 A:搜索北京 ─────────────→ 晚返回
请求 B:搜索上海 ─────→ 先返回并显示
请求 A 返回后覆盖页面

翻页、筛选和商品详情也会遇到这种乱序。解决办法通常不复杂:页面只接受仍然属于当前状态的结果。用户已经换了关键词,旧搜索即使成功,也没有资格再更新界面。

麻烦在于正常网络下两个请求往往按顺序返回,这个漏洞很难露面。弱网把时间拉开,它就出现了。

自动重试会在恢复时扎堆

重试本身没有错。网络偶尔抖一下,自动再试一次,能省掉用户不少操作。

问题是每个模块都觉得自己应该马上重试。

首页刷新一次,消息列表重连,上传任务恢复,埋点开始补传,后台同步也醒了。如果每个请求还有自己的多次重试,网络刚恢复就会出现一批集中流量。服务端可能才从故障中缓过来,又被新的请求推高负载。

用户连续点击会继续放大这个数量。页面没有反馈,他点了三次提交;App 的自动重试又各跑两次,原本一次操作很快变成多次请求。

恢复任务最好有一点秩序。当前页面和用户正在等待的操作可以优先,后台任务稍后再走;重试之间留出间隔,并加一点随机错开,避免大量设备在整点般的同一时刻发起请求。

如果某个服务已经明确不可用,继续高频重试没有意义。先停下来,等下一次合适的时机,通常比不停敲门更省事。

不同业务,恢复方式不能一刀切

普通查询最轻松。失败后重新获取即可,旧结果过期就丢掉。

写操作要谨慎得多。点赞、评论和下单需要防重复,页面也要知道当前是提交中、结果未知,还是已经确认成功。

大文件上传适合保存已经确认完成的部分。网络回来后从断点继续,比重新发送几百 MB 更快,也能减少用户流量。这里不能只记住进度条显示到哪里,还要以服务端确认的数据为准。

实时音视频通常会重新建立连接。恢复后先保证声音和画面回来,再逐步提高码率比较稳妥。网络刚连上就立刻冲到最高画质,很可能又把链路塞满。

消息业务还要考虑顺序。离线期间发送的内容、恢复后新发的内容以及服务端补下来的历史消息,需要按稳定的标识整理,不能只按到达手机的先后顺序排列。

这些差异说明,“网络恢复后全部重试”不是一条可执行的业务策略。团队得先知道每类操作重做一次会发生什么。

页面要承认自己还在恢复

系统显示网络已连接,不代表 App 已经准备好。连接重建、状态确认和任务恢复都需要时间。

这几秒里,页面可以说实话。

付款场景显示“正在确认付款结果”,比重新亮起付款按钮安全;上传任务显示“网络已恢复,正在继续”,用户就不必反复点击。实时通话也可以短暂提示“正在重连”,而不是让画面停在那里,假装一切正常。

按钮是否可用,要看业务状态,不能只看网络图标。用户已经提交过一次,结果还没确认时,简单粗暴地重新开放按钮会把风险交给用户承担。

当然,提示也别堆满屏幕。状态发生变化时给一句准确的话,比轮流弹出“网络异常”“请求失败”“重试中”三个提示更清楚。

测试时,多盯恢复后的 30 秒

一个恢复场景可以很短:

正常网络 10 秒
→ 断网 5 秒
→ 低带宽恢复 10 秒
→ 正常网络 20 秒

断网前发起一次业务操作,断网期间再进行一次用户点击,然后观察恢复阶段。重点检查这些现象:

  • 是否出现重复订单、重复消息或重复文件;
  • 旧响应有没有覆盖当前页面;
  • 积压请求是否在同一时间大量发出;
  • 上传、播放和长连接能否继续;
  • 页面状态最终能否和服务端一致。

最好再快速重复几轮。第一次恢复正常,第三次开始出现两个连接或一批旧任务,往往说明会话结束时没有清理干净。

写在最后

网络重新连上,只完成了恢复的第一步。后面还有旧请求收尾、任务重排和业务状态确认。

把恢复当成一个过程,问题会好理解很多:哪些任务可以重做,哪些只能查询结果,哪些旧响应已经没有用了。把这些规则定清楚,App 才不会在信号满格后突然手忙脚乱。

下一篇我们给这套体验定个标准。弱网测试没有崩溃、请求最后也成功了,究竟能不能算通过?

保险理赔App开发实战:文件上传、网络幂等与系统适配要点 原生Android开发涉及文件共享、网络通信、系统兼容与数据安全等基础能力。FileProvider作为Android 7.0后安全的文件访问机制,是相机拍照、材料上传等场景的关键;网络层的幂等设计则保障了弱网环境下重复提交的一致性。结合保险理赔这类强流程业务,App不仅需要正确封装文件存取,还要适配Android 11包可见性与Android 14存储限制,并通过加密存储和日志脱敏守住隐私底线。本文从这些通用技术要点出发,剖析在保险理赔App开发中的工程实践与避坑经验。 阅读详情

相关推荐

Python实战:如何用高德API批量获取POI数据(附完整代码)

本文详细介绍了如何使用Python通过高德API批量获取POI数据,包括API基础准备、核心功能模块设计、高级功能实现及实战应用案例。文章提供了完整代码示例,帮助开发者高效解决商业网点分析、公共设施规划等实际项目中的数据采集需求。

stem5的博客 328

网页能打开,为什么 App 还是提示“网络异常”?

明明连着 Wi-Fi,网页能打开,聊天也正常,为什么一进 App,登录却提示“网络异常”?“手机有网”和“这次请求成功”其实是两回事。浏览器、图片、登录接口可能访问不同的服务,走不同的路径。遇到这类问题,与其先让用户换网络,不如先搞清楚:到底是哪一次访问失败了?

NetworkSimulator的博客 213

区域法(zonal method)重构波前

目的:实现区域法的Matlab代码 1.理论介绍 区域法波前重构即从波前探测器测得的波前斜率中恢复出波前的相位值,其分为:休晋模型(Hudgin)[90]、绍契威尔模型(Southwell)[40]和弗雷德模型(Fried)[48]。 1.1 Fried模型,对于N×N微透镜阵列构成的网格: 以3*3的子透镜为例,解释上式,对其展开 改写为矩阵形式: 记作:S=AΦ,A根据N而确定。S是波前探测器测得的斜率,Φ是重构矩阵的相位值。 1.2 而Southwel...

EyRe1的博客 8198

【网络安全】手机不幸被远程监控,该如何破解,如何预防?_手机被监控了怎么解除

手机被远程监控虽然不是很常见,但如果不幸被远程监视,那损失可就不可估量,应该尽快按照上面的三个方法来应急处理。为了尽量减少这样的不幸发生,我们也可以按照预防的三招来安全使用手机。

Spontaneous_0的博客 9093

【open judge】【程设】魔兽世界三开战!

#程设 魔兽世界三---开战!--------原以为会很容易ac,没想到写了好久,看来自己的水平还是亟待提高啊!有几个比较有趣的点:1. typeid(#include<typeinfo>)还是比较好用的,特别是本题当战士为wolf,iceman, dragon, ninja时有特殊技能,那么用typeid判断一下就很方便了。2. 对于这种输出很复杂的问题,往往通过使用文件的输入输出再...

weixin_40841416的博客 6073

C++调用海康相机SDK采集图像(C++\QT Creator\openCV\线程\接口)

C++调用海康相机SDK采集图像(C++\QT Creator\openCV\线程\接口) 之前写了一篇关于C++调用海康相机SDK采集图像的文章,有很多人私下发送消息咨询了一些问题,由于工作繁忙,只答复了一部分问题,今天抽出时间从头梳理了一下大家提出的问题,把我能够回答的问题都解答一次。上一次的程序只是简单的实现了图像的采集,没有使用到线程,今天把程序重新做出调整,把线程和多态加进去。文章最后有项目的下载地址。 我使用的是QT Creator这个IDE,版本信息如下: 我把相机采集的图像转换为openC

大樱桃的博客 1万+

为什么很多人会选择学网络安全?前景如何?

网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道(很多白帽子可能会不服气),因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”,才能解人才之渴,真正的为社会全面互联网化提供安全保障。

2402_84205067的博客 1232

别再被SpringerLink虐了!手把手教你搞定LaTeX源文件提交(附正确文件顺序和类型选择)

本文详细解析了SpringerLink投稿系统中LaTeX源文件提交的常见问题与解决方案,包括文件打包、类型选择和顺序排列等关键步骤。通过实战经验,帮助科研人员避开隐形陷阱,一次性完成LaTeX提交,提升投稿效率。特别针对`.bst`和`.cls`文件的正确处理提供了专业指导。

weixin_42522964的博客 445

永不丢失的阅读体验:Yuedu书源备份与恢复全攻略

你是否遇到过这样的情况:精心整理的小说书源突然失效,收藏的阅读进度化为乌有?作为「阅读」APP用户,书源的稳定性直接决定了阅读体验。本文将系统讲解Yuedu书源的备份与恢复方法,帮助你构建安全可靠的阅读环境。读完本文,你将掌握三种备份策略、两种恢复方法以及书源失效的应急预案,让你的小说阅读不再受"断粮"困扰。 ## 为什么需要备份书源? 书源作为「阅读」APP的核心资源,其稳定性直接影响使用体

gitblog_00783的博客 1166

zynq+LWIP 裸机双网口实现(MIO+EMIO)+程序下载

芯片型号: ZYNQ: XC7Z010clg400开发软件:Vivado2022 + Xilinx Vitis 2022网卡芯片:RTL8211FDI(需要根据网口芯片型号修改对应的硬件配置代码。

thinking in 小宇宙 3411

allegro如何设置走线等长

设置走线等长!

weixin_42499230的博客 6938

不注册、不登录的经期记录 App 怎么选?我为什么做了隐私优先的萌芽 Sprout

记录身体,不是为了让每一天都符合某个标准。真正有价值的,是在一段时间之后,能够更清楚地理解自己的变化,并在需要休息、调整生活或寻求专业帮助时,拥有更完整的信息。萌芽 Sprout 希望做的,就是把复杂的记录变得简单一些,把敏感的数据留在用户自己手中,也把判断的权利交还给用户。产品名称:萌芽 Sprout产品类型:女性周期与身体节律记录 App官方网站:产品介绍与支持:本文由萌芽 Sprout 开发者/产品主理人发布,属于产品功能与设计理念介绍,不是用户测评,也不构成医疗建议。

zklimeng的博客 178

TGAT Python:图神经网络中的动态图算法

其中,图神经网络中的动态图算法成为了研究的热点之一。在模型的 forward 方法中,通过循环调用 TGATLayer 实例来进行图神经网络的前向传播。最终,模型返回图中节点的表示向量 output,可以用于图分类等任务。TGAT 算法的核心思想是在节点之间建立注意力连接,以捕捉节点在不同时间步之间的关系。TGAT 算法通过引入注意力机制和时间信息,从而有效地对动态图数据进行建模和分析。通过以上 Python 代码,我们可以方便地构建和训练 TGAT 模型,并在图分类任务中应用它。

2301_79366435的博客 1830

网络安全前景如何?为什么现在很多人会选择学网络安全?

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

2401_85280228的博客 1112

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

iOS 网络请求断连重试失败?抓包分析丢包原因的完整流程

摘要:iOS App在恢复网络后登录请求丢失的问题排查显示,App缺乏自动重试机制是主因。通过Charles、Sniffmaster、mitmproxy和Wireshark等工具组合分析,确认iOS版本仅在首次点击时发送请求,网络恢复后未触发补发。对比安卓端有重试机制的表现,建议改进iOS App的网络异常处理流程,加入自动补发和用户提示功能。该案例展示了多工具协作定位移动端网络问题的有效方法。(148字)

2501_91373349的博客 781

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【计算机网络篇|第二篇】深度解析TCP三次握手

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它在通信双方之间建立一条逻辑连接,保证数据按序到达、不丢失、不重复,并提供流量控制和拥塞控制能力。HTTP、FTP、SSH 等大量应用层协议都构建在 TCP 之上。由于 TCP 是面向连接的协议,通信双方在传输数据之前必须先建立连接,而建立连接的过程就是著名的「三次握手」。

wuzhihua66的博客 530

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: 真实的弱网,从来不是一个固定参数
下一篇: 弱网测试没报错,就算通过了吗?
NetworkSimulator
博客等级 码龄83天 0粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值