基于安卓的利用socket推送消息的方法和系统的制作方法

文档序号:9846799阅读:561来源:国知局
基于安卓的利用socket推送消息的方法和系统的制作方法
【技术领域】
[0001]本发明涉及移动互联网领域,特别是一种基于安卓的利用socket推送消息的方法 和系统。
【背景技术】
[0002] 目前主流的四种基于安卓(Andro id)系统的消息推送方式分别为:XMPP (Extensible Messageing and Presence Protocol:可扩展消息与存在协议)、GCM服务 (Google Cloud Messaging)、MQTT协议以及使用HTTP轮循方式。其中XMPP协议较复杂、冗余 (基于XML)、费流量、费电,部署硬件成本高;GCM是Google推出的云消息服务,即第二代的 G2DM,其使用受到安卓版本限制,必须大于2.2版本方可使用,该服务在国内不够稳定、需要 用户绑定Google帐号,受限于G 〇〇gle;MQTT是轻量级的、基于代理的"发布/订阅"模式的消 息传输协议,目前来说不够成熟、实现较复杂,服务端组件rsmb不开源,部署硬件成本较高; HTTP轮询方式是定时向HTTP服务端接口(Web Service API)获取最新消息,该方式的实时 性差。现在使用比较多的推送功能是XMPP,如附图1所示,XMPP中定义了三个角色,客户端, 服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息 记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统 可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器, 然后在之上传输XML。
[0003] Socket方式协议较以上几种协议都更简单,而且稳定,不依赖于特定的公司,很成 熟,部署成本不高,实时性最强,尤其是在聊天软件中最能体现。Socket的英文原义是"孔" 或"插座"。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作〃套接字〃,用于描述 IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。 在In ternet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个 Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那 样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座 提供220伏交流电,有的提供110伏交流电,有的则提供有线电视节目。客户软件将插头插到 不同编号的插座,就可以得到不同的服务。
[0004] 使用socket连接首先要在外部建立一个socket服务器,手机端向服务器发送 socket请求,建立一个长连接,这种长连接是稳定,实时的,任何时候有服务器想对客户端 推送消息都可以马上收到,理论上socket是会一直保持连接状态的,但是实际应用中 socket的长连接会遇到两个问题:第一,由于网络不稳定或服务器负载的原因,socket可能 会断开,这样就不能接收推送;第二,由于安卓系统会在内存不够时杀死应用,用户有时也 会手动关闭应用,造成socket断开,无法达到我们想要的功能。

【发明内容】

[0005] 本发明的目的在于克服现有技术问题的缺陷,提供一种基于安卓的利用socket推 送消息的方法和系统。
[0006]根据本发明的一个方面,提供了一种基于安卓的利用socket推送消息的方法,包 括如下步骤:
[0007] A:服务器端启动并开启socket;
[0008] B:基于安卓的客户端开启service并在其中启动一线程,在该线程中发起socket 连接请求;
[0009] C:服务器端和客户端建立socket长连接,以用于服务器端和客户端之间进行消息 推送;
[0010] D:客户端按一预频率向服务器端发送心跳包,以进行心跳检测。
[0011] 优选地,所述service运行在安卓系统后台。
[0012] 优选地,所述心跳检测包括如下步骤:
[0013] Dl:客户端每隔一个时间间隔发送一个心跳包给服务器端,并同时启动一个超时 定时器;
[0014] D2:如果客户端收到服务器的应答包,则删除超时定时器;
[0015] D3:如果客户端的超时定时器超时,依然没有收到应答包,则进行重连。
[0016 ]优选地,所述时间间隔设置为周期性时间间隔。
[0017] 优选地,所述心跳包设置为小数据包或者只包含包头的空包。
[0018] 优选地,所述应答包设置为小数据包或者只包含包头的空包。
[0019] 优选地,所述客户端数量大于1,在每个客户端开启的service数量大于1,每一个 service分别与所述服务器端建立socket长连接。
[0020] 根据本发明的一个方面,提供了一种基于安卓的利用socket推送消息的系统,包 括:
[0021] 服务器模块,配置为在服务器端启动并开启socket;
[0022] 客户端模块,配置为在基于安卓的客户端开启service并在其中启动一线程,在该 线程中发起socket连接请求;
[0023]连接模块,配置为在服务器端和客户端建立socket长连接,以用于服务器端和客 户端之间进行消息推送;
[0024]探测模块,配置为在客户端按一预频率向服务器端发送心跳包,以进行心跳检测。
[0025] 优选地,所述检测模块包括:
[0026] 发送单元,配置为在客户端每隔一个时间间隔发送一个心跳包给服务器端;
[0027] 接收单元,配置为在客户端接收服务器的应答包;
[0028] 计时单元,配置为在客户端启动一个超时定时器,如果客户端收到服务器的应答 包,则删除超时定时器,如果客户端的超时定时器超时,依然没有收到应答包,则进行重连。 [0029 ]优选地,所述时间间隔设置为周期性时间间隔。
[0030] 优选地,所述心跳包设置为小数据包或者只包含包头的空包。
[0031] 优选地,所述应答包设置为小数据包或者只包含包头的空包。
[0032]本发明的有益效果是:
[0033] Service是安卓系统的一个组件,在安卓系统后台运行,当在程序中开启了 Service后,即使程序关闭,Servi ce还是能够继续运行,所以在service中建立的socket连 接不会因为程序关闭而断开,保证了客户端的socket连接;通过心跳检测可以保证即使由 于网络或者防火墙的原因导致的socket断开,也可以及时重连,保证服务器和客户端的连 接,使客户端及时接收到来自服务器的推送消息。
【附图说明】
[0034]下面结合附图和实例对本发明作进一步说明。
[0035]图1是根据现有技术中基于安卓的利用XMPP推送消息的结构示意图。
[0036]图2是根据本发明的基于安卓的利用socket推送消息的结构示意图。
[0037]图3是根据本发明第一实施例的基于安卓的利用socket推送消息的方法的流程 图;
[0038]图4是根据本发明第三实施例的基于安卓的利用socket推送消息的系统的模块 图。
【具体实施方式】
[0039]本发明提供一种基于安卓的利用socket推送消息的方法和系统,如图2所示,包括 服务器端和客户端,服务器端和客户端之间通过socket建立长连接,用于相互之间进行消 息推送。
[0040]根据本发明的一个实施例,如图3所示,所述socket长连接包括步骤:
[0041] A:服务器端启动并开启socket;
[0042] 具体地,服务器端开启一个socket服务端,代码如下:
[0043]其中,以//开头的汉字是对代码的解释。
[0044] ServerSocket server = new ServerSocket(20000);
[0045] B:基于安卓的客户端开启service并在其中启动一线程,在该线程中发起socket 连接请求;
[0046] 具体地,客户端的应用开启时启动service:
[0047] Intent startIntent=new Intent(Login.this,ClientService.class);
[0048] startService(startlntent);
[0049]
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1