【文章分享】移动无线网络长连接
NAT 功能由图中的 GGSN 模块实现。
大部分移动无线网络运营商都在链路一段时间没有数据通讯时,会淘汰 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 可以正常的休眠,只有在需要运行任务时醒来一段很短的时间。极光推送的 Android SDK 就是基于这种技术实现的。
服务器设计
当有大量的手机终端需要与服务器维持长连接时,对服务器的设计会是一个很大的挑战。
假设一台服务器维护10万个长连接,当有1000万用户量时,需要有多达100台的服务器来维护这些用户的长连接,这里还不算用于做备份的服务器,这将会是一个巨大的成本问题。那就需要我们尽可能提高单台服务器接入用户的量,也就是业界已经讨论很久了的 C10K 问题。
C2000K
针对这个问题,我们专门成立了一个项目,命名为C2000K,顾名思义,我们的目标是单机维持200万个长连接。最终我们采用了多消息循环、异步非阻塞的模型,在一台双核、24G内存的服务器上,实现峰值维持超过300万个长连接。
后记
稳定维护长连接是推送平台的一个基础,极光推送团队将会在这方面长期投入,以保证用户能有效的节省电量、流量,同时数据能实时送达。
[解决办法]
学习下长连接的知识,多谢楼主分享
[解决办法]
单机并发300W么,相当的犀利啊
[解决办法]
支持下没钱看哦
[解决办法]
good,还是挺靠谱的啊
[解决办法]
厉害 涨见识了
[解决办法]
激光推送博客上的文章。。。
[解决办法]
可以短信push啊,终端只需要注册receiver就行了.
[解决办法]
貌似和GCM差不多吧
[解决办法]
谢谢楼主;感谢
[解决办法]
不错不错不错
[解决办法]
在及时响应的同时还省电省流量对吧
[解决办法]
貌似很强大,学习学习了
[解决办法]
涨知识了,长连接才是最佳方案啊
[解决办法]
有没有试过用IPV6来做?
