引用:BrainWong 发表于 2022-09-08 21:18 长连接代价比较高,有可能是轮询。也有可能是长短配合,并不单纯是长或短 |
我想问问,如果像共享单车那种,采用2g网络接收服务端的推送消息。那么一直保持长连接的情况下,服务端不是会产生巨大的开销吗? 一条tcp连接开销都接近3kb了 |
写得太好了 |
引用:椎锋陷陈 发表于 2021-08-26 16:54 |
引用:JackJiang 发表于 2021-08-26 15:46 不敢不敢,得益于在即时通讯网长期浸染您分享的优质文章,才能做出这个总结 |
引用:椎锋陷陈 发表于 2021-08-25 19:30 感谢学霸,总结的好! |
整篇文章看下来收益颇丰,但整体感觉就是文章中的措辞太过「专业」,可能对新手来讲理解难度比较大,这里我对文章中提到的一些内容写一下我自己的一些通俗的理解,如有错误还请指正:引用:推送连接不稳定 指的是长连接无法建立时,利用轮询请求来拉取最新的消息。但由于这种请求是单向的,只能客户端主动向服务端拉取消息,服务端无法主动向客户端推送消息。 且轮询请求存在时间差,无法保证能及时拉取到最新消息。 引用:断线重连 指的是在底层去完成重连操作,偶然的断连不影响用户的操作,用户感受不到断连和重连的情况。 引用:分组/聚合消息 指的是对消息批量下发,减少消息的往返时间。 引用:实现 指的是SDK每次发送心跳包时都会设置一个超时时间,如果在超时时间内没有返回则会记录超时异常。 SDK还会额外开启一个定时器,当到达定时时间节点时检查是否有记录的超时异常,有的话则开始重连操作。 引用:上行数据时及时检测 指的是心跳周期比较久时,检查心跳超时可能会不及时,因此在每次发送数据(消息、心跳等)时都会主动检查心跳超时。 引用:非固定心跳 指的是业务数据包本身可以充当心跳包的作用,当业务数据收发正常时就证明链路是可用的,就不需要额外再发送心跳包了。 引用:在网络持续不可用的情况下避免连续建连使得系统满载。 指的是当重连失败次数越来越多时,表明短时间内重连成功的几率就越小,这个时候就要适当增加一下重连的间隔,以减轻服务器的负载。 引用:累计异常 指的是用错误累计的方法判断连接是否失效,避免偶然的断连使一个原本很好的连接被断开。 |