基于移动互联网的终端消息推送方案研究*

2017-12-07 06:17
菏泽学院学报 2017年5期
关键词:服务器端应用程序消息

王 莹

(厦门东海职业技术学院,福建 厦门 361100)

基于移动互联网的终端消息推送方案研究*

王 莹

(厦门东海职业技术学院,福建 厦门 361100)

针对移动互联网环境,提出了移动设备上的消息推送方案,通过消息推送方案能够实现稳定可靠的消息推送.该消息推送方案是基于服务器主动向客户端进行发送的,在推送中服务器支持对单独的终端、多终端消息推送,也可以基于标签的形式向特定的群组进行推送.提出的方案可以为移动互联网应用提供快速可靠的消息推送.

移动互联网;终端消息推送;Android/IOS

1 概述

随着互联网的发展,客户机主动的向服务器请求信息的单一方式已经不能够满足目前用户对数据的需求,如何通过服务器向客户机推送信息,通过为互联网上内容提供者和内容定制方之间提供一种通信机制已经成为了目前的研究热点,服务端主动向客户端进行消息推送,提高了服务器的主动性的同时也增加了服务器与客户端的交互性能[1~2].

传统互联网都是客户端主动向服务器请求数据,服务器接收用户的请求后将用户请求的数据传输到客户端.而客户端与服务器端保持心跳,服务器主动向客户端推送信息则是目前新兴互联网中的PUSH数据交互方式[3].PUSH的使用场景有时间不确定性以及时效性两个特点,在日常应用中发送的团购信息、电子消费账单等都是通过PUSH数据交互方式实现的[4~5],本文基于移动互联网的环境,提出了移动终端推送的解决方案,并且详细分析了第三方的应用如何接入本文的移动解决方案.

2 推送解决方案

消息推送是实现消息从服务器端发送到客户端的过程,由于服务器端与客户端的关系是一对多的关系,因此,一条消息在服务器端可能会发送给多个客户端.消息推送的过程是启动客户端的同时需要在推送服务器主动注册,推送服务器记录客户端的消息并且通过心跳方案定时检查客户端是否在线,如果服务器端在心跳方案中检测客户端已经下线,则服务器记录该客户端为下线状态,对于下线状态的客户端由于服务器无法与其建立通讯连接,因此,是不能对下线的客户端进行消息推送的.当服务器有消息要发送给客户端时,服务器在进行注册过的客户端中选择在线的客户端,请求通过消息筛选方式选择需要发送的客户端,服务器与客户端建立消息连接,通过消息连接将消息发送到客户端,完成移动应用的消息推送.

在系统需要对下线的客户端进行消息推送时,我们通过在服务器记录需要发送的消息以及下线的客户端信息,当服务器检测到客户端上线并且在消息服务器进行注册时,服务器与客户端建立消息推送连接,将客户端的离线信息推送到对应的客户端.移动应用的消息推送主要包括推送服务器以及客户端两个部分,如下对推送服务器以及客户端进行介绍.

推送服务器:推送服务器负责维护客户端的基本情况以及状态,同时,将消息推送给客户端,具体包括接收客户端的连接请求,记录已经连接的客户端信息,并且通过轮询的机制对客户端进行心跳检查,记录客户端的活动状态.

客户端:通过TCP/UDP方式主动发起对推送服务器的连接请求,连接成功后负责接收推送服务器下发的推送信息以及回复推送服务器的心跳检查.

移动消息推送解决方案如图1所示.

图1 移动消息推送解决方案

从图1可见,对在消息推送过程中的客户端与服务器端的交互流程进行了设计,移动消息推送实施之前需要客户端到推送服务器注册,消息推送服务器检查注册客户端的在线状态以及消息推送服务器通过消息推送连接发送消息给客户端,移动消息推送解决方案的详细流程如下:

1)启动推送服务器,初始化服务器,并且在服务器端开启客户端连接服务进程;

2)启动客户端,客户端主动向推送服务器发起注册请求;

3)推送服务器接收客户端推送注册请求,验证客户端是否满足注册条件,如果满足则记录客户端注册信息,否则,告知客户端注册失败;

4)客户端接收服务器注册返回结果,如果注册失败,则提示推送注册失败,流程结束;

5)客户端推送注册成功,开启推送服务器心跳检查回复进程,如果在长时间没有收到服务器心跳检查,客户端需主动向注册服务器上报状态;

6)服务器端定时需要注册的客户端发送心跳检查,并且记录客户端上报的状态,如果长时间没有收到某个客户端的状态上报,则认为此客户端为睡眠状态;

7)服务器端有消息需要推送时,遍历在服务器端注册的处于活跃的客户端,并且将信息发送给客户端.

3 第三方推送服务

消息推送在移动互联网中的应用是目前的一个研究热点,大量移动应用都需要消息推送服务与用户进行交互.但是,移动消息推送作为一个与系统业务不相关的功能,如果每个应用都开发自己的一套消息推送系统,不仅仅会加大应用开发的成本,降低应用开发的进度,同时,消息推送效率也很难满足实际要求.因此,目前消息推送在移动应用中都是通过接入第三方消息推送系统所提供的移动应用消息推送功能来实现.

接入第三方消息推送系统的应用方式优势在于消息推送与应用的业务逻辑是完全解耦的,实现了系统的高内聚低耦合的要求,使用第三方消息推送可以降低应用开发成本,加快应用开发的进度.由于第三方消息推送专注于解决消息推送过程中的核心技术,因此,在消息推出过程中的耗电问题、网络稳定性以及推送到达率等核心问题的解决上有一定的优势.

新的移动互联网推送方案能够为移动APP提供推送服务的解决方案,但是,对于具体的APP开发,由于推送不是其核心业务,所以,完全没有必要去开发和维护一套推送系统,因此,如何以第三方的方式接入本文的移动互联网推送解决方案,研究如何为移动应用提供第三方推送服务是非常必要的,如图2所示,是通过第三方推送服务方案接入本文消息推送系统的详细设计图.

图2 第三方应用接入推送服务方案

通过第三方的形式提供推送服务不仅可以减少移动应用开发在消息推送中的投入,而且能够提高消息推送的到达率等.在应用接入第三方的消息推送服务器过程中只需要移动应用的客户端中包括推送SDK,并且客户端通过推送SDK到推送服务器进行注册以及响应消息推送的心跳检查.在第三方的应用程序接入推送服务方案中通过推送SDK、推送服务器、应用服务器和应用程序之间进行信息交互实现了移动信息的推送,各实体描述如下:

推送SDK:作为应用程序的客户端集成工具包,提供应用程序与推送服务器之间的交互,包括到推送服务器注册以及接收并处理推送服务器推送的信息.

推送服务器:需要维护已经注册的推送客户端信息,并且与推送客户端保持心跳连接,在推送中与指定的客户端建立消息传输连接,将服务器的信息主动推送到客户端.

应用服务器:第三方应用程序的服务器,与推送服务器进行交互,将需要推送的数据以及客户端信息提交给推送服务器,有推送服务器完成消息推送.

应用程序:即第三方应用程序,是集成了推送SDK的移动应用,对推送SDK接收的信息进行显示,并且可以控制推送SDK的消息收发功能.

应用服务器需要保持Client ID与客户端UID的映射关系,在消息推送时通过映射关系确定推送客户端,再由推送服务器实施消息推送,完整的第三方推送服务推送过程的技术流程如下:

1)应用程序集成推送SDK;

2)应用程序启动时,通过推送SDK到推送服务器进行注册,并且与推送服务器保持心跳连接;

3)应用服务将需要推送的消息以及客户端信息提交给推送服务器,由推送服务器与推送SDK进行交互完成消息推送;

4)推送SDK获取推送服务器的消息,通过一定的形式提交给应用程序进行消息内容展示.

在推送实现中,移动APP通过推送工具包与推送服务器进行通讯,移动推送的核心代码是通过向推送服务器发送客户端编号以及需要推送给客户端的信息内容,推送服务器通过TCP/IP协议与移动APP的第三方推送SDK建立连接并激活客户端,将信息发送到客户端,移动APP推送的核心代码如下:

public class PusherUtil {

private static final Logger logger = LoggerFactory.getLogger(PusherUtil.class);

/* 向user 推送消息msg*/

public static void push(String host, int port, String deviceUid, String msg) {

logger.info("ddpush args [ host:{}, port:{}, user:{}, msg:{} ]", host, port, deviceUid, msg);

StopWatch sw = new StopWatch();

sw.start();

Pusher pusher = null;

try {

InetAddress ipAddress = InetAddress.getByName(host);

pusher = new Pusher(ipAddress.getHostAddress(), port, 5000);

pusher.push0x20Message(md5Byte(deviceUid), msg.getBytes("UTF-8"));

} finally {

if (pusher != null) {

try {

pusher.close();

}

}

sw.stop();

logger.info("ddpush time : {} ms", sw.getTotalTimeMillis());

}

public static PushedNotifications push(String apnsFilePath, String password, boolean production, String deviceToken, String msg, String type) {

logger.info("apns args [ password:{}, production:{}, deviceToken:{}, msg:{}, type:{}]", password, production, deviceToken, msg, type);

StopWatch sw = new StopWatch();

sw.start( );

try {

PushNotificationPayload complexPayload = PushNotificationPayload.complex();

complexPayload.addCustomAlertLocKey(msg);

complexPayload.addBadge(0);

complexPayload.addSound("default");

complexPayload.addCustomDictionary("type", type);

PushedNotifications pn = Push.payload(complexPayload, apnsFilePath, password, production, deviceToken);

logger.info("apns time : {} ms", sw.getTotalTimeMillis());

return pn;

} catch (CommunicationException e) {

throw new RuntimeException(e);

}

}

/*向所有人推送消息msg*/

public static void push(String host, int port, String msg) {

push(host, port, KMO_USER, msg);

}

private static byte[] md5Byte(String encryptStr) throws Exception {

MessageDigest md = MessageDigest.getInstance("MD5");

md.update(encryptStr.getBytes("UTF-8"));

return md.digest();

}

}

4 总结

移动互联网的快速成长促进了消息推送服务的发展,而消息推送本身与应用程序具体业务无关,因此将消息推送作为第三方的程序为应用程序提供服务的方式应运而生.综上所述提出的移动互联网的推送解决方案,分析了推送系统的结构和消息推送流程,并对第三方如何接入该推送服务进行了介绍.

虽然针对移动终端提出了推送解决方案,但是,目前仍然有耗电问题、网络稳定性以及推送到达率等技术问题需要克服,下一步我们的工作将继续对移动互联网的推送关键技术进行研究,致力于实现移动互联网上最稳定可靠的推送服务,并在相关技术参数上做到最优.

[1]许金喜, 张新有. Android平台基于MQTT协议的推送机制[J]. 计算机系统应用, 2015, 24(1):185-190.

[2]倪红军. 基于Android平台的消息推送研究与实现[J]. 实验室研究与探索, 2014, 33(5):96-100.

[3]汪海占, 邸萌, 黄祥林. 基于XMPP协议的Android消息推送设计与实现[J]. 科技广场, 2015(2):40-46.

[4]李文江, 陈诗琴. 基于Android GCM服务的图书馆信息推送系统设计[J]. 现代图书情报技术, 2013, 29(11):91-96.

[5]苏龙江. 基于iOS的舆情推送系统的设计与实现[D]. 厦门:厦门大学, 2013.

OnSchemeofTerminalMessagePushBasedonMobileInternet

WANG Ying

(Xiamen Donghai Institute, Xiamen Fujian 361100, China)

Aiming at the mobile internet environment, a message push scheme for mobile devices is proposed to achieve stable and reliable message push. The scheme is sent by the server to the client automatically including individual terminal, multi terminals and specific groups in the form of tags. The proposed scheme can provide fast and reliable message push for mobile internet applications.

mobile internet; terminal message push; Android/IOS

1673-2103(2017)05-0045-05

2017-07-06

2014年福建省中青年教师教育科研项目(JAS14914)

王莹(1980-),女,山东掖县人,讲师,硕士,研究方向:计算机应用技术.

TP393.4

A

猜你喜欢
服务器端应用程序消息
Linux环境下基于Socket的数据传输软件设计
一张图看5G消息
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计
基于C/S架构的嵌入式监控组态外设扩展机制研究与应用
消息
消息
消息