如何实现android和服务器长连接

作者&投稿:逄鲍 (若有异议请与网页底部的电邮联系)
android怎么实现HTTP长连接~

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来实现心跳功能,使其真正实现长连接。


在服务器端的实现:
在服务器端,可以使用很多语言来实现,如C/C++,java,Erlang等等,如我们国内比较好的极光推送(C开发),openfire(java开发)等等。
最近我看了极光推送的介绍和原理,下面我就说说他们是遇到什么难题,然后使用什么技术或者方案来解决呢。

当有大量的手机终端需要与服务器维持长连接时,对服务器的设计会是一个很大的挑战。


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


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




最后总结:
因为我最近用java在做一个PC、服务器、android的即时通讯系统(说白了就是模仿QQ,后面希望有不同的功能)。我的原则是用别人的原理,自己来实现,这样才更好深入了解一些框架。所以,估计难点是在通讯开发和服务器上的开发,必须深刻了解多消息循环、异步非阻塞的模型。之后我会发表关于这方面的实现。
在现在的android平台上,已经不是android单机的世界了(我不是说做单机游戏没有前途)。现在都是依靠发展蓬勃的互联网来支撑整个IT体系,所以,要成为一个android应用开发高手,必须朝着android、硬件、云服务这一体系来发展。

你好,现编这个就是个多线程服务器,只要在client不释放连接,服务器端的run里边写while(TRUE)循环,那么就可以长期连接。
  class ConnectionThread extends Thread{
  Socket client;
  int counter;
  public ConnectionThread(Socket cl,int c){
  client = cl;
  counter= c;
  }
  @Override
  public void run()
  {
  try{
  String destIP=client.getInetAddress().toString();
  int destport =client.getPort();
  PrintStream outstream=new PrintStream(client.getOutputStream());
  DataInputStream instream=new DataInputStream(client.getInputStream());
  String inline=instream.readLine();
  }//try
  catch(IOException e){System.out.println(e);}
  }//run

   这种功能实际上就是数据同步,同时要考虑手机本身、电量、网络流量等等限制因素,所以通常在移动端上有一下两个解决方案:
  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系统上,定时器通常有一下两种:
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来实现心跳功能,使其真正实现长连接。


华为p30支持北斗导航吗
1、华为p30支持北斗导航,北斗默认开启的哦,打开gps直接定位就可以使用。确认手机实际是否可以搜到北斗导航卫星,您可以在应用市场搜索名为【androiTSGPSTest】的测试软件,安装到手机后看搜星结果。如果看到卫星ID是200以上的就是北斗导航在运行。2、事实上目前高通的处理器大部分都是支持北斗的,800系列...

什么是模拟器?
BlueStacks—ARM-Androi模拟器(完美度45%)PC DosBox—16位DOS模拟器(完美度60%)VMware Workstation—x86和x64 PC模拟器(完美度95%)Microsoft Virtual PC \/ Windows PC \/ Virtual Server—x86和x64 PC模拟器(完美度65%)出品团队为原PS模拟器VGS的公司Connectix,后被微软收购 SunVirtualBox—...

通信技术和电子技术哪一个更好?
通信技术啊 你想自己创业的话还是通信技术吧,因为通信技术比较偏向软件一些,电子技术更偏向硬件,你想创业的软件成本比较小,硬件耗资巨大而且现在国内硬件主要是买的国外的,尤其是你想染指iphone,androi的话,还是通信吧,电子技术几乎完全不涉及这方面(除非你导师有这方面项目,或者学校开课比较。。。

Androi是什么
Android 作为Google企业战略的重要组成部分,将进一步推进“随时随地为每个人提供信息”这一企业目标的实现。全球为数众多的移动电话用户正在使用各种基于 Android 的电话。谷歌的目标是让(移动通讯)不依赖于设备甚至平台。出于这个目的,Android 将补充,而不会替代谷歌长期以来奉行的移动发展战略:通过与全球...

华为p30pro导航是北斗模块,还是软件
华为p30pro导航是北斗模块。确认手机实际是否可以搜到北斗导航卫星,可以在应用市场搜索名为androiTSGPSTest的测试软件,安装到手机后看搜星结果。如果看到卫星ID是200以上的就是北斗导航在运行。北斗导航系统由导航软件自动调用,无法手动指定使用北斗导航系统。此外华为mate30pro还支持L1+L5双频GPS,华为mate...

通过连上电脑后,用手机本身上网
http:\/\/jingyan.baidu.com\/article\/fec7a1e52a9c7e1191b4e770.html 首先我们需要在网上搜索并下载如下两个APK程序:“Android busybox”和“Androi Gscript”。下载完成后,利用相关手机管理类程序将这两个APK安装到手机中。通过USB数据线将手机与电脑相连,依次点击“设置”→“无线和网络”→“绑定与...

VE视频引擎的SDK口碑怎么样?
VE视频引擎的SDK包括剪辑SDK和模板SDK两部分,剪辑SDK的主要功能主要是由轨道和特效实现,通俗来讲可以打造类似剪映这样的产品。模板SDK则是通过修改固定素材来生成新的视频,大大地降低视频制作门槛。VE视频引擎拥有强大的跨平台视频处理能力,能快速地将AE设计的视频特效移植到各大平台,目前支持Androiod、...

民用的北斗导航什么时候可以用上?
北斗早在2000年就可以民用了,手机是否支持科普取决于芯片,而不是地图软件。1994年北斗一号系统工程建设正式启动。考虑到当时我国的科技水平,北斗采用了三步走的迭代进化方法:2000年发射了2颗地球静止轨道卫星,建成北斗一号系统,为中国用户提供定位、授时、广域差分和短报文通信服务。2004年启动北斗二号...

构造函数跟onCreate()函数有什么区别
他们的不同点是:构造函数调用是通过new Activity();,回调函数式Androi系……-

支持北斗导航系统的手机有哪些?
目前支持接收北斗卫星信号的安卓手机数量很多,但依然有一些没有支持北斗系统。如果希望了解手机是否支持接收北斗信号,方法并不难。1、直接查看产品参数列表,一些产品会直接表明是否支持。2、通过卫星信号解析软件来查看,比如,androits gps test。一般软件会现导航卫星的种类提示,配有国旗的标志。当看到...

河西区15026217020: 如何实现android和服务器长连接 -
缑勇脂降: 一般与服务器的连接在15分钟左右无操作就会断掉,要想实现长连接就得定时每过几分钟就向服务器端发送一个请求(这种请求只是为了与服务器保持连接,所以无需请求服务器端的数据,对程序的效率基本无影响).

河西区15026217020: android 客户端怎么实现长连接和短连接 -
缑勇脂降: 所谓长连接,指在一个连接上可以连续发送多个数据包,然后断开连接,在连接保持期间,如果没有数据包发送,需要双方发链路检测包.短连接是指通讯双方有数据交互时,就建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送.

河西区15026217020: 如何干净的实现Android/Java Socket 长连接通信 -
缑勇脂降: 你好,现编这个就是个多线程服务器,只要在client不释放连接,服务器端的run里边写while(TRUE)循环,那么就可以长期连接.class ConnectionThread extends Thread{Socket client;int counter;public ConnectionThread(Socket cl,int c){...

河西区15026217020: android怎么实现HTTP长连接 -
缑勇脂降: 1.一种是定时去server查询数据,通常是使用HTTP协议来访问web服务器,称Polling(轮询);2.还有一种是移动端和服务器建立长连接,使用XMPP长连接,称Push(推送).从耗费的电量、流量和数据延迟性各方面来说,Push有明显的优势.但是使用Push的缺点是:对于客户端:实现和维护相对成本高,在移动无线网络下维护长连接,相对有一些技术上的开发难度.对于服务器:如何实现多核并发,cpu作业调度,数量庞大的长连接并发维护等技术,仍存在开发难点.

河西区15026217020: 如何实现android客户端与服务端数据同步 -
缑勇脂降: android客户端不能直接与服务器数据库连接,拿sqlserver来说,安装之后有几个G那么大,android程序是跑在手机上的,想让程序直接访问sqlserver,那手机需要非常大的内存.但是可以通过webservice这样一个桥梁来间接访问SQLServer....

河西区15026217020: 怎样保持服务端与安卓客户端之间的长连接收、...
缑勇脂降: 这个软件使用自己架构的网络,不能与外界网络相连,也就是不可以连接互联网.用推送还可以吗?没用过这种东西,不知道是怎么回事.

河西区15026217020: Android与PC通过socket建立长链接, -
缑勇脂降: 这个是可以的,都是网络连接TCP协议,当然没问题!至于ip地址?如果你是在内网(同一个路由器或多个路由器组成的局域网)中,可以使用电脑网络详细信息中得到的192段的ip(不知道可以百度你的内网ip),如果是外网,又要分情况,如果直接宽带上网(不借助路由器),可以百度ip关键字,第一个就是,填上即可,如果是内网,在刚才的基础上,还要通过路由器内网映射才行(具体百度,关键字 路由器端口映射),这主要是因为外网ip只有一个,对应的是你的主机或者路由器,而路由器下可以有多台主机(主机就当计算机吧),所以必须端口映射指定访问哪个主机!______最后,希望采纳,手打不容易!

河西区15026217020: android socket 长连接demo -
缑勇脂降: 1 你要正确连上服务器2 实时发送心跳包给服务以保持长连接

河西区15026217020: 请问开发android的朋友,怎么样在tcp socket中建立长连接,好像只能在线程里建立连接,线程关闭了就断了. -
缑勇脂降: 后台开启一个线程一直运行,每隔1分钟左右发送一个心跳报文给服务器,以确保时刻跟服务器链接.若超过3次服务器未对客户端发送的心跳报文做出回应则重新链接. 如果这么作的话,必须确保和服务器达成一定的应用层协议.

河西区15026217020: android怎么和服务器通讯 -
缑勇脂降: 基本上是2种方式, HTTP 协议,或者 用Socket.这2种方式都是需要服务器端的IP地址.HTTP协议的话,有多种接口可以调用你可以用Java类库封装的HttpConnection 或者用Apach的开源项目的 HttpGet 或者HttpPost ,服务器端 需要 编写 Serlvet来响应客户端的请求.Sokcet 的话, 就是 服务器端 不断监听 双方约定好的端口号,客户端通过服务器IP去请求连接,经过握手之后,连接成功,得到Socket 的输入输出流,直接操作即可.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网