如何实现android和服务器长连接
这种功能实际上就是数据同步,同时要考虑手机本身、电量、网络流量等等限制因素,所以通常在移动端上有一下两个解决方案: 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映射表的负荷,所以如果发现链路中有一段时间没有数据通讯时,会删除其对应表,造成链路中断。Push在Android平台上长连接的实现:既然自己知道自己移动端要和Internet进行通信,必须通过运营商的网关,所以,为了不让NAT映射表失效,咋们需要定时向Internet发送数据,因为只是为了不然NAT映射表失效,所以只需发送长度为0的数据即可。这时候就要用到定时器,在android系统上,定时器通常有一下两种:1javautilTimer2androidappAlarmManager分析:Timer:可以按照计划或者时间周期来执行相关的任务。但是Timer需要用WakeLock来让CPU保持唤醒状态,才能保证任务的执行,这样子会消耗大量流量;当CPU处于休眠的时候,就不能唤醒执行任务,所以应用于移动端明显是不合适。AlarmManager:AlarmManager类是属于android系统封装好来管理RTC模块的管理类。这里就涉及到RTC模块,要更好地了解两者的区别,就要明白两者真正的区别。RTC(Real- Time Clock)实时闹钟在一个嵌入式系统中,通常采用RTC 来提供可靠的系统时间,包括时分秒和年月日等;而且要求在系统处于关机状态下它也能够正常工作(通常采用后备电池供电),它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32768KHz 晶体和电阻电容等。(如果对这方面感兴趣,可以自己查阅相关资料,这里就说个大概)好了,回来正题。所以,AlarmManager又称全局定时闹钟。这意味着,当自己用使用AlarmManager来定时执行任务,CPU可以正常地休眠,只有在执行任务是,才唤醒CPU,这个过程是很短时间的。下面简单来说明其使用:1类似于Timer功能://获得闹钟管理器AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);//设置任务执行计划amsetRepeating(AlarmManagerELAPSED_REALTIME, firstTime, 51000, sender);//从firstTime才开始执行,每隔5秒再执行2实现全局定时功能://获得闹钟管理器AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);//设置任务执行计划amsetRepeating(AlarmManagerELAPSED_REALTIME_WAKEUP, firstTime, 51000, sender);//从firstTime才开始执行,每隔5秒再执行总结:在android客户端使用Push推送时,应该使用AlarmManager来实现心跳功能,使其真正实现长连接。
Serverpush——崭新的“推”技术,它是一种先进的服务器和客户机之间的通信连接方式,利用在服务器端的CGI脚本程序把数据源源不断地推向客户机,从而使客户机和服务器之间的交互性能大大提高。在中国计算机报电脑工作室中有介绍Serverpush,我们也搜集整理一些关于Server push的资料,供大家参考。
首先也来看看传统Client pull的工作方式,Client pull以 这样的HTML文档头来自动刷新页面,使用户的浏览器能不断地刷新以接受服务器传回的内容,那么用户就不得不忍受等待“time”值的痛苦,相信在中国电信的网速之下,大家对这个深有体会。
采用了Serverpush技术的服务器在客户机做出一个请求后,和客户机建立一个永久的连接,然后服务器会根据客户机的请求不断把数据包推向客户,这个推的过程是不间断的。由服务器推向客户机的数据在客户机的浏览器上会不断产生新的内容,而且不会产生Client pull那样的HTML文档头,从而大大减少了延迟的时间,向(服务器响应——客户机请求)同步迈进了一步。
实现Serverpush技术非常简单。Server push在服务器的CGI脚本声明HTML文档类型时,把传统的content-type:text/html改为content-type:multipart/x-mixed-replace;boundary=BOUNDARY这样的文档类型,就会反馈给用户一个Server push类型的连接。这是Serverpush和Client pull的根本区别。如果CGI脚本中提供了这样的HTML文档头,服务器在处理客户机请求调用CGI脚本程序时,就会把CGI脚本中指定的数据强行推给客户机。
Serverpush在生成页面时会采用很多的技巧来处理用户端浏览器页面的生成。主程序和传统方式没有本质的区别,但记得在脚本中加入print“Content-Type:multipart/x-mixed-replace;boundary=BOUNDARY”这样的文档头。应用在PERL写的CGI聊天室中有立竿见影之效,其速度和刷新方式和传统聊天室不是一个档次的。
push作为及物动词的时候意思是“推动,增加;对…施加压力,逼迫;按;说服”,作不及物动词的时候意思是:“推进;增加;努力争取”,作名词的时候意思是:“推,决心;大规模攻势;矢志的追求”。
不少的同学在学到push这个英文单词的时候,总觉得这个英文单词的中文意思不好把握,下面让我们一起去了解这个英文单词的正确用法吧。
详细内容 01单词发音:
英 [pʊʃ] 美 [pʊʃ] 。
02push technology推送技术 ; 推技术 ; 推拨技术;
Push shot推杆 ; 推击 ; 推射 ; 推球;
Push stroke推杆 ; 椎杆 ; 推球 ; 推击。
03A push一推 ; 轻轻一推 ; 阿普什;
cost push成本推进型 ; 成本推动 ; 生产成本提高 ; 本钱推动型;
push around欺骗 ; 摆布 ; 驱使 ; 你想你是不是可以把这个报告重写一遍。
04Server Push服务器推技术 ; 服务器推送技术 ; 服务器推送 ; 服务器推;
More push多推;
push out排挤 ; 安全球 ; 拉出 。
05I can push you off me
我可以把你从我身上推下去。
Should I push or run
我不应该推或跑?
What do you have to do within those system to push the system in one direction or other
在那个系统内你要做些什么,才能把这个系统朝一个方向或另一个方向发展?
0条评论