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 可以正常的休眠,只有在需要运 行任务时醒来一段很短的时间。极光推送的 Android SDK 就是基于这种技术实现的。

服务器设计

当有大量的手机终端需要与服务器维持长连接时,对服务器的设计会是一个很大的挑战。
假设一台服务器维护10万个长连接,当有1000万用户量时,需要有多达100台的服务器来维护 这些用户的长连接,这里还不算用于做备份的服务器,这将会是一个巨大的成本问题。那就 需要我们尽可能提高单台服务器接入用户的量,也就是业界已经讨论很久了的 C10K 问题。

C2000K

标题针对这个问题,我们专门成立了一个项目,命名为C2000K,顾名思义,我们的目标是单机维 持200万个长连接。最终我们采用了多消息循环、异步非阻塞的模型,在一台双核、24G内存 的服务器上,实现峰值维持超过300万个长连接。

后记

稳定维护长连接是推送平台的一个基础,极光推送团队将会在这方面长期投入,以保证用户 能有效的节省电量、流量,同时数据能实时送达。

你可能感兴趣的:(Android)