如果还需要担心DNS劫持的话,则还需要加一层HttpDNS的过程。也就是通过Http协议将域名解析成对应的可信任的IP列表,通过ip直接访问。
长连接通过Socket与服务端建立持久的链接,即使单个请求发送与接收后也不会释放链接。这样的好处有:
虽然长连接的好处很多,但是在保持长连接稳定的过程中也会存在很多的问题:
所以,在应用中,就需要保护长连接的稳定,否则会导致很多信息收不到。
NAT:因为 IP v4 的 IP 量有限,运营商分配给手机终端的 IP 是运营商内网的 IP,手机要连接 Internet,就需要通过运营商的网关做一个网络地址转换(Network Address Translation,NAT)。简单的说运营商的网关需要维护一个外网 IP、端口到内网 IP、端口的对应关系,以确保内网的手机可以跟 Internet 的服务器通讯。GGSN(Gateway GPRS Support Node 网关GPRS支持结点)模块就实现了NAT功能。 因为大部分移动无线网络运营商都是为了减少网关的NAT映射表的负荷,所以如果发现链路中有一段时间没有数据通讯时,会删除其对应表,造成链路中断。
为了从客户端保持长连接的稳定,有这些方案:
运营商NAT超时时间
在保证长连接的过程中,太频繁发送网络请求,并且当前设备状态不佳时,都需要动态的调整长连接的策略。并且在收到消息后,本地存储的时机都需要进行考虑。
当用户的长连接断了之后,如果不能重启,则需要将长连接进行降级策略,例如使用Http轮询策略。
在长连接消息的本地存储中,通常都使用SQLite数据库,当然也有新型的ORM数据库例如ObjectBox。而通常长连接都需要考虑数据库的点有:
对于有产品矩阵的App而言,可以通过产品矩阵来发送Push的通知从而拉起相应的产品。比如百度、腾讯、阿里、头条等