从通信的角度分析一下微信推送的长连接的弊端——网易面试题

网易那场面试整体水平很高,也让我知道如何去准备android方面的面试

印象比较深的就是这个问题  从通信的角度分析一下微信推送的长连接的弊端 这个问题把通信跟android网络很好地结合在一起,查了一下资料发现为了这个问题当年腾讯还跟运行商发生了摩擦

首先了解一下信令风暴

信令风暴:网络受到终端信令的请求超过了网络各项信令处理的能力,引发拥塞甚至雪崩效应,导致网络不可用,我们称之为“信令风暴”

由于手机QQ,微博,微信这种应用的使用往往会有后台推送消息,一般socket连接1对服务器消耗太大,现在常用MQTT这种轻量级消耗的协议来维护一个长连接,维护一个长连接我们需要使用心跳包来通知连接双方彼此之间没有断开,客户端给服务器发一个心跳,服务器收到后进行应答,如果超过一个时间阈值没有收到服务器的应答,那么客户端断开原来的连接,再与服务器重新建立一个连接

由于智能手机使用的移动无线网络跟Internet区别很大,造成以下缺陷:

1、高于正常频率发送心跳包来维持长连接,这样无疑会带来信令风暴

2、这类心跳包频率很短 造成信令资源的浪费

3、造成手机电量的耗费

造成这种原因是由于智能手机连上移动网络时并没有连上真正的Internet。运营商通过NAT(network adddress translation)来转换移动内网ip和外网ip,从而最终实现连上Internet,其中GGSN(gateway GPRS support Node)模块来实现NAT的过程,但是大部分运营商为了减少网管NAT的映射表的负荷,若一个链路有一段时间没有通信就会删除其对应表,造成链路中断,因此运营商采取的是刻意缩短空闲连接的释放超时,来节省信道资源,但是这种刻意释放的行为让这些推送app不得不以高于平常的频率来发送心跳来维护推送的长连接,从而导致了上面提到的三个缺陷

从通信的角度分析一下微信推送的长连接的弊端——网易面试题_第1张图片

你可能感兴趣的:(Android相关,android基础)