socket偶现未连接

如题所述

第1个回答  2022-07-18
项目是基于MQTT,但重连逻辑被重写过。项目中会先请求LBS接口返回ip地址,再进行socket链接。

之前是只有一个LBS地址,失败之后内部重试链接。现在服务端会返回两个ip地址,第一个失败之后再进行第二个连接。

socket连接使用CFStreamCreatePairWithSocketToHost,超时由系统控制。
socket连接坏的IP地址,超时时间在75s,无法控制超时时间。

在[self.encoder open];时dispatch_after控制超时时间,如果在规定时间内没有回调,则认为ip连接失败。返回给上层,进行下一个ip连接。

源码阅读参考 MQTT源码阅读及问题分析
偶现socket未连接,复现概率比较低。只有结合日志,阅读源码。

突破点在于connectHandler这个block;为什么没有回调。