苹果建议,我们应该从工程的最开始,就是用苹果内置的Network Link Conditioner 来模拟各种的网络环境来处理 App 的体验问题。Network Link Conditioner在 Xcode 和手机中都可以开启,具体可以参考这篇文章 Network Link Conditioner[1]
ECN技术已经在 macOS 和 iOS 中默认启用了好些年(从 2015年5月 开始打开默认开关,对应 OS X 10.11 和 iOS9),因此开发者可以无需在 app 中添加任何代码即可享受此特性,以下截图来自WWDC2015:Your App and Next Generation Networks[9]
MPTCP允许在一条TCP链路中建立多个子通道。当一条通道按照三次握手的方式建立起来后,可以按照三次握手的方式建立其他的子通道,这些通道以三次握手建立连接和四次握手解除连接。这些通道都会绑定于MPTCP session,发送端的数据可以选择其中一条通道进行传输,因此MPTCP可以让用户在切换网络环境的时候,不需要重新建立 TCP 连接。以下图文来自WWDC2017 Advances in Networking, Part 1[10]
从全球移动运营商中做的调查来看,78% 的网络可以支持MPTCP
如果需要开启MPTCP的话,代码实现大致如下
// Load MPTCP
funcloadWithMultipathServiceType( _ type : URLSessionConfiguration.MultipathServiceType, handler:@escaping (MPTCPStats?, Error?) -> Void) { let urlString = "http://amiusingmptcp.de/v1/check_connection"
let sessionConfiguration = URLSessionConfiguration.ephemeral sessionConfiguration.multipathServiceType = type let session = URLSession(configuration: sessionConfiguration) let url = URL(string: urlString)! session.dataTask(with: url) { (data, response, error) in
有很多案例显示,为了避免 DNS 中心出现错误的缓存,所以有些网站设置了过短的 DNS 缓存时间,如60秒或更短,而如果可以对 DNS 查询结果做一次标记,这样就可以更好地利用缓存。这个被称为乐观 DNS(Optimistic DNS) 的优化。DNS 是有时效限制的,当查询的结果过期后,我们可以乐观地认为这个结果依然是有效的并使用这个 IP 地址建立连接,同时,系统会并行的发起一个新的 DNS 请求。目前这个策略在 cloudkit 里面已经使用。如果想要手动应用上该特性,可以按照如下示例来做
如果之前查询得到的 IP 地址确实是有效的,并且你设置了.expiredDNSBehavior = .allow,那么这就省去了等待 DNS 查询结果的时间。如果服务器的地址确实改变了,那么系统将等待查询结果并用新得到的地址建立连接。这就是被称为 Happy Eyeballs(RFC 6555) 算法。想了解更多,可以参考WWDC2018 Introducing Network.framework: A modern alternative to Sockets[13]
不要用系统的网络接口判断网络可用性,而应该让系统的属性去自然处理网络请求
如果使用SCNetworkReachability作为网络可用性检查,会因为用户网络环境的瞬变而导致不可预知的结果,建议还是使用waitsForConnectivity属性来更好地处理网络流程,后面会说到具体的策略。关于这部分的介绍,可以回顾WWDC2017 Advances in Networking, Part 1[14]
所有公开的受信任的 CA 机构颁发的新的 TLS 证书必须能够被 Certificate Transparency 验证
现有的已经颁发的证书不受影响
客户端不受影响
Bonjour
Bonjour,原名 Rendezvous,是苹果电脑公司在其开发的操作系统 Mac OS X10.2版本之后引入的服务器搜索协议所使用的一个商标名。适用于 LAN,Bonjour使用多点传送域名系统服务记录来定位各种设备,比如打印机或者其他电脑,以及另外设备上的服务。Bonjour一致性测试是一种工具,可以帮助验证硬件设备是否正确实施了Bonjour,从而提高产品质量,使其更可靠,让客户满意并不会将产品退回商店
如果要在包装上使用Bonjour商标名称和徽标,则需要运行此测试
如果要将Bonjour for Windows安装程序与 Windows 应用程序捆绑在一起,则需要运行此测试
Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。
Sublime Text
Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。