feat: 精确引用

This commit is contained in:
LiuBinPeng
2022-03-28 20:53:51 +08:00
parent 192a45e709
commit a3e54696ab

View File

@@ -146,7 +146,7 @@ if (self.socket == NULL) {
```
### 2. 设备无可用空间问题
![设备无可用空间问题](./../assets/NoSpaceLeftOnDevice.png)
![设备无可用空间问题](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/NoSpaceLeftOnDevice.png)
最早遇到这个问题,直观的判断是某个接口所在的服务器机器,出现了存储问题(因为查了代码是网络回调存在 Error 的时候会调用我们公司基础),因为不是稳定必现,所以也就没怎么重视。直到后来发现线上有商家反馈这个问题最近经常出现。经过排查该问题该问题 `Error Domain=NSPOSIXErrorDomain Code=28 "No space left on device"` 是系统报出来的,开启 Instrucments Network 面板后看到显示 Session 过多。为了将问题复现,定时器去触发“切店”逻辑,切店则会触发首页所需的各个网络请求,则可以复现问题。工程中查找 NSURLSession 创建的代码将问题定位到某几个底层库HOOK 网络监控的能力上。一个是 APM 网络监控,确定 APMM 网路监控 Session 创建是收敛的另一个库是动态域名替换的库之前出现过线上故障。所以思考之下暂时将这个库发布热修代码。之前是采用“悲观策略”99%的概率不会出现故障然后牺牲线上每个网络的性能增加一道流程而且该流程的实现还存在问题。思考之下采用乐观策略假设线上大概率不会出现故障保留2个方法。线上出现故障马上发布热修调用下面的方法。
```
+ (BOOL)canInitWithRequest:(NSURLRequest *)request {
@@ -158,7 +158,7 @@ if (self.socket == NULL) {
// 代理网络请求
}
```
问题临时解决后,后续动态域名替换的库可以参考 WeexSDK 的实现。见 [WXResourceRequestHandlerDefaultImpl.m](https://github.com/apache/incubator-weex/blob/master/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.m)。WeexSDK 这个代码实现考虑到了多个网络监听对象的问题、且考虑到了 Session 创建多个的问题,是一个合理解法。
问题临时解决后,后续动态域名替换的库可以参考 WeexSDK 的实现。见 [WXResourceRequestHandlerDefaultImpl.m](https://github.com/apache/incubator-weex/blob/master/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.m#L37)。WeexSDK 这个代码实现考虑到了多个网络监听对象的问题、且考虑到了 Session 创建多个的问题,是一个合理解法。
```
- (void)sendRequest:(WXResourceRequest *)request withDelegate:(id<WXResourceRequestDelegate>)delegate