先贴 github 地址骗几个 star😂
https://finaltheory.github.io/wireless-network-reproduction/
然后解释一下这个命名为 WNR 的工具解决了怎样的问题。
事实上现在网络模拟工具已经有好多了,比如 Mac OS 上有 Apple 官方的 Network Link Conditioner , FaceBook 推出了基于 tc 的 ATC , Windows 上面有 Network Emulator for Windows Toolkit 以及非官方的 clumsy ,甚至 Chrome 都自带网络模拟功能……
正常情况下如果只是为了检查自己开发的 App 能否在低速网络下工作,那么上述这些工具基本都能够满足需求。但是在我们的实际工作中发现,有时候需要对一些特定的弱网络环境进行重现,从而进行针对性的改进。这个时候,现有的各种软件就统统派不上用场了。因此, WNR 这个东西,说白了就是用来从网络层( IP 协议)干扰数据传输的通用工具,能够真实地模拟出一切可能出现的客户端弱网环境,从而能够用于移动端 App 的深度网络优化。
WNR 模拟器主要提供以下这些弱网模拟功能:
并且具有如下高级特性:
WNR 可以针对性地干扰特定进程的网络传输,并且不影响其他进程的正常网络 IO 。假如 Mac 上跑着一个 GenyMotion 虚拟机,你就可以针对虚拟机的进程来进行网络模拟,然后把整个网络交互过程导出为 pcap 文件,来进行进一步的分析。也就是说,你可以从网络流量中筛选出你所感兴趣的那个进程,来查看它所发出 /收到的数据包。
下面举个简单的例子。百度地图在使用过程中,由于移动所造成的网络抖动,有时候会卡死在检索页上。由于网络抖动之类的特征是随着时间变化的,因此完全无法使用上述工具来模拟,但使用新开发的这套工具,则可以轻易复现这种环境。比如模拟一种带宽随着时间呈正弦波动的网络,那么实际的wget
下载速度变化就会如下图所示:
另一方面,如果你开发了一种针对弱网络环境的优化策略,想要说明收益的时候,按照正常流程,你需要把功能先小流量上线,收集反馈数据,根据数据反馈调整策略,从而完成一轮次的优化迭代,这个过程是非常耗时的,而且收益情况还不一定符合你的预期。但如果使用这种本地重现网络环境的方式,你可以直接先把自己的策略在一些具有代表性的弱网环境上跑出结果,这样直接就得到了初步的收益评估。
说了这么多,接下来该简单说说这货怎么用了。其实非常简单:下载,解压,双击打开即可。配置文件的写法可以参考这里,就是简单的 json 文件,如果有人愿意试用的话,先看看示例配置即可上手,最近正在准备文档。
最后补充一句, WNR 里面用到了一个内核扩展来查询数据包的所属进程,然而我并非 iOS 开发者,没有用于内核签名的账号,导致使用 WNR 的话需要手动停用 Mac OS 的内核扩展签名检查,这带来了一定的安全隐患。这部分代码非常少,仅有不到 1k 行,并且以后基本不会再变动,因此希望能有 V 友帮忙签名一下,感激不尽!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.