?

基于移動互聯網的終端消息推送方案研究*

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架構的嵌入式監控組態外設擴展機制研究與應用
消息
消息
消息
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合