公网服务器与局域网手机长链接

转自:http://zhidao.baidu.com/link?url=161OQiZ7u-7Q1lfP9VbAOuAqFugPMFq889wviO-XF9I41DgTRyhk3WNGi361qM4j2lCfpX7nvvyNu3LZ1a89Xb56p3xzyN77cBn7k-oio-_java

这种功能实际上就是数据同步,同时要考虑手机自己、电量、网络流量等等限制因素,因此一般在移动端上有一下两个解决方案:
1.一种是定时去server查询数据,一般是使用HTTP协议来访问web服务器,称Polling(轮询);
2.还有一种是移动端和服务器创建长链接,使用XMPP长链接,称Push(推送)。
从耗费的电量、流量和数据延迟性各方面来讲,Push有明显的优点。可是使用Push的缺点是:
对于客户端:实现和维护相对成本高,在移动无线网络下维护长链接,相对有一些技术上的开发难度。
对于服务器:如何实现多核并发,cpu做业调度,数量庞大的长链接并发维护等技术,仍存在开发难点。
在讲述Push方案的原理前,咱们先了解一下移动无线网络的特色。
移动无线网络的特色:
由于 IP v4 的 IP 量有限,运营商分配给手机终端的 IP 是运营商内网的 IP,手机要链接 Internet,就须要经过运营商的网关作一个网络地址转换(Network Address Translation,NAT)。简单的说运营商的网关须要维护一个外网 IP、端口到内网 IP、端口的对应关系,以确保内网的手机能够跟 Internet 的服务器通信
GGSN(Gateway GPRS
Support Node 网关GPRS支持结点)模块就实现了NAT功能。
由于大部分移动无线网络运营商都是为了减小网关的NAT映射表的负荷,因此若是发现链路中有一段时间没有数据通信时,会删除其对应表,形成链路中断。(关于NAT的做用及其原理能够查看个人另外一篇博文:关于使用UDP(TCP)跨局域网,NAT穿透的心得)
Push在Android平台上长链接的实现:
既然咱们知道咱们移动端要和Internet进行通讯,必须经过运营商的网关,因此,为了避免让NAT映射表失效,咱们须要定时向Internet发送数据,由于只是为了避免然NAT映射表失效,因此只需发送长度为0的数据便可。
这时候就要用到定时器,在android系统上,定时器一般有一下两种:
1.java.util.Timer
2.android.app.AlarmManager
分析:
Timer:能够按照计划或者时间周期来执行相关的任务。可是Timer须要用WakeLock来让CPU保持唤醒状态,才能保证任务的执行,这样子会消耗大量流量;当CPU处于休眠的时候,就不能唤醒执行任务,因此应用于移动端明显是不合适。
AlarmManager:AlarmManager类是属于android系统封装好来管理RTC模块的管理类。这里就涉及到RTC模块,要更好地了解二者的区别,就要明白二者真正的区别。
RTC(Real- Time Clock)实时闹钟在一个嵌入式系统中,一般采用RTC
来提供可靠的系统时间,包括时分秒和年月日等;并且要求在系统处于关机状态下它也可以正常工做(一般采用后备电池供电),它的外围也不须要太多的辅助电路,典型的就是只须要一个高精度的32.768KHz
晶体和电阻电容等。(若是对这方面感兴趣,能够本身查阅相关资料,这里就说个大概)
好了,回来正题。因此,AlarmManager又称全局定时闹钟。这意味着,当我用使用AlarmManager来定时执行任务,CPU能够正常地休眠,只有在执行任务是,才唤醒CPU,这个过程是很短期的。
下面简单来讲明其使用:
1.相似于Timer功能:
//得到闹钟管理器
AlarmManager
am = (AlarmManager)getSystemService(ALARM_SERVICE);
//设置任务执行计划
am.setRepeating(AlarmManager.ELAPSED_REALTIME, firstTime, 5*1000,
sender);//从firstTime才开始执行,每隔5秒再执行
2.实现全局定时功能:
//得到闹钟管理器
AlarmManager
am = (AlarmManager)getSystemService(ALARM_SERVICE);
//设置任务执行计划
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime,
5*1000, sender);//从firstTime才开始执行,每隔5秒再执行
总结:在android客户端使用Push推送时,应该使用AlarmManager来实现心跳功能,使其真正实现长链接。android

 

得学习一下push。。。web

相关文章
相关标签/搜索