浅析即时通讯开发中移动端实时消息推送技术

Posted wecloud1314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅析即时通讯开发中移动端实时消息推送技术相关的知识,希望对你有一定的参考价值。

实时消息推送在移动端互联网时代很平常,也很重要,它的存在让智能终端真正成为全时信息传播的工具。本文将从移动端无线网络的特点来谈谈实时消息推送的技术原理及相关问题,希望能给你带来些许启发。

 

移动端实时消息推送的基本实现原理

因为手机平台本身、电量、网络流量的限制,移动互联网应用在设计上跟传统 PC 上的应用很大不一样,需要根据手机本身的特点,尽量的节省电量和流量,同时又要尽可能的保证数据能及时到达客户端。

为了解决数据同步的问题,在手机平台上,常用的方法有2种。一种是定时去服务器上查询数据,也叫Polling(严格来讲,这种方式不能称为“实时”)。还有一种手机跟服务器之间维护一个 TCP或UDP 长连接(UDP实际上是无连接协议,但为了解决端口老化问题,仍然需要“心跳保活”机制,我们姑且认为它也是一种广义“长连接”),当服务器有数据时,实时推送到客户端,也就是我们说的 Push。

从耗费的电量、流量和数据送达的及时性来说,Push 都会有明显的优势,但 Push 的实现和维护成本相对较高。在移动无线网络下维护长连接,相对也有一些技术上的难度。

移动端无线网络的特点

因为 IP v4 的 IP 量有限,运营商分配给手机终端的 IP 是运营商内网的 IP,手机要连接 Internet,就需要通过运营商的网关做一个网络地址转换(Network Address Translation,NAT)。简单的说运营商的网关需要维护一个外网 IP、端口到内网 IP、端口的对应关系,以确保内网的手机可以跟 Internet 的服务器通讯。即时通讯聊天软件app开发可以加蔚可云的v:weikeyun24咨询

 

大部分移动无线网络运营商都在链路一段时间没有数据通讯时,会淘汰 NAT 表中的对应项,造成链路中断。

android 平台上推送长连接的实现思路

为了不让 NAT 表失效,我们需要定时的发心跳,以刷新 NAT 表项,避免被淘汰。Android 上定时运行任务常用的方法有2种,一种方法用 Timer,另一种是AlarmManager。

Timer:
Android 的 Timer 类可以用来计划需要循环执行的任务,Timer 的问题是它需要用 WakeLock 让 CPU 保持唤醒状态,这样会大量消耗手机电量,大大减短手机待机时间。这种方式不能满足我们的需求。

AlarmManager:
AlarmManager 是 Android 系统封装的用于管理 RTC 的模块,RTC (Real Time Clock) 是一个独立的硬件时钟,可以在 CPU 休眠时正常运行,在预设的时间到达时,通过中断唤醒 CPU。

这意味着,如果我们用 AlarmManager 来定时执行任务,CPU 可以正常的休眠,只有在需要运行任务时醒来一段很短的时间。目前主流的推送技术基本都是基于这种技术实现的。

ios 平台上的消息推送

众所周之,iOS平台实现消息推送有且仅有唯一方案好选:苹果官方的APNS服务。

以上是关于浅析即时通讯开发中移动端实时消息推送技术的主要内容,如果未能解决你的问题,请参考以下文章

im即时通讯开发:群消息推送如何保证实时性

iOS和Android即时通讯开发时后台实时消息推送的原理和区别

浅析即时通讯开发实时信息推送服务器DDPush

即时通讯开发如何构建一套移动端消息推送系统

即时通讯开发中WebSocket和SSE技术如何实现Web端消息推送

浅析如何掌握IM即时通讯移动端开发时图片格式的特点