消息推送实现技术研究

作者: 蒋凌燕

消息推送实现技术研究0

关键词:消息推送;实时消息传递;通信协议;推送系统架构;技术方案

0 引言

随着移动互联网和物联网的快速发展,消息推送技术作为实现大量信息实时传递的关键技术之一,在各种应用场景中发挥着重要的作用。从移动应用的消息通知,到电商平台的促销信息推送,再到工业物联网设备的实时状态监控,消息推送技术为社会和人民的生活提供了方便快捷的信息传输。

然而,随着应用场景的不断扩展和用户需求的不断提高,消息推送技术也面临着新的挑战。例如,如何确保在海量用户并发访问的情况下,消息推送依然能够保持高并发、低延迟和高可靠性,如何保障消息传输过程中的安全性和用户隐私等。

本文旨在对消息推送实现技术进行深入研究,分析不同技术方案的优缺点,并探讨其适用场景。文章首先介绍消息推送的基本概念和典型应用场景,然后分别从基本通信技术、实现方式、协议和实现技术等方面进行详细分析,最后总结全文并展望未来发展趋势。

1 消息推送概述

消息推送是软件系统中重要功能,由服务器主动且高效发送大量消息到用户[1],在具体实现时对所使用的技术有较高的要求。推送功能有多种实现方式,作为软件中的一个模块、作为中间件或者独立的跨平台推送系统,常见的推送有Web推送和手机App推送等。Web推送是网站后台对用户需求和行为偏好进行分析,生成推送内容推送到浏览器,手机App推送是把信息推送到App内或者手机通知栏。

推送的形式多样化、内容精准化和智能化是现在的主要趋势[2-4],如何使消息推送简便易行且高效,更好的被用户的关注,和系统所采用的推送方式以及推送内容有关,设计方案着重提高推送精准性、运行效率和响应速率[5]。

2 基本通信技术

消息推送将消息主动推送到客户端,由于推送频率差别较大,采用不同的基本通信技术,常用的有基于TCP的轮询、长连接和SMS短消息等。轮询是由客户端定时发起请求,服务器接受请求后返回消息,或者根据需求由服务器推送,网络占用较少。长连接在客户端和服务器之间保持连接来发送消息,提供消息发送的高可靠性。长连接经TCP三次握手建立,过程如图1所示,客户端首先发送请求SYN到服务器;服务器回复响应SYN和ACK到客户端,表示接受请求建立连接;客户端再发送ACK到服务器,表示确认连接的建立。SMS短消息是基于短信的推送方式,内容主要是文本,用户访问率高但成本高。

3 实现方式

常见的消息推送实现方式有:基于AJAX的短轮询和长轮询、SSE(Server-Sent Events) 、WebSocket 和FCM(Firebase Cloud Messaging) 。短轮询和长轮询是基于HTTP通过轮询建立连接,长轮询保持连接,而短轮询不保持连接。SSE(Server-Sent Events) 建立从服务器到客户端的流,通过事件驱动完成推送的过程。WebSocket在服务器和客户端之间建立长期的连接,可以进行复杂的数据交互。FCM(Firebase Cloud Mes⁃saging) 是谷歌提供的消息发送服务,服务器通过FCM 的API发送消息到客户端。

3.1 基于AJAX 的短轮询和长轮询

短轮询是一种简单的消息推送方式,客户端定时向服务器发送请求,服务器接收到请求后立即返回响应信息。短轮询的结构简单,易于实现,但实时性较差,且服务器负载较大,适用于客户端数量少、消息频率低的场景。

长轮询在服务器端保持连接并挂起,直到有数据需要发送时才返回响应,客户端接收到响应后立即再次发起请求,从而实现消息的准实时推送。相较于短轮询,长轮询能够有效降低服务器负载,提高消息推送的实时性,但实现较为复杂。

3.2 SSE(Server-Sent Events)

SSE是服务器推送技术,通过长连接在客户端和服务器之间建立stream流,多次发送数据。服务器使用事件流发送数据到客户端,客户端通过HTTP连接监听事件流,接收服务器所推送的数据。SSE采用单向数据流,从服务器发送到客户端,可以传输文本和二进制数据;数据传输过程如图2所示。客户端设定请求的事件流类型,向服务器发送请求,服务器接收请求,返回的响应中设置事件的媒体类型、编码和分块传输等,服务器更新数据时将多个事件发送到客户端;客户端创建EventSource 对象,打开连接并通过onopen事件等完成消息接收。SSE实现更简单,兼容性更好,适用于从服务器向客户端推送数据。

3.3 WebSocket

WebSocket是建立在TCP连接上的全双工通信,使用长连接发送数据,实时性较好,常用于聊天软件、协作型软件、实时推送系统以及在线游戏等。在Web 网站上使用时,浏览器设置协议为WebSocket,向服务器发送HTTP请求,服务器解析请求生成数据返回到浏览器,并在服务器和浏览器之间建立WebSocket连接。WebSocket提供事件、方法、状态码等用于消息传递;采用心跳包检查连接状态;连接断开时自动重连;支持海量并发和大负载;能高效使用带宽;性能较好,实时性方面具有优势。

3.4 FCM(Google Cloud Messaging)

Google的FCM(Google Cloud Messaging) 是谷歌云消息,可以在APPLE、Android 和Web 网站上发送消息,提供客户端和服务器端的组件。消息经服务器传输至FCM后端,打包成为元数据,再经传输层传送到客户端。FCM提供单终端、成组终端或者订阅模式三种方式传送消息,具备跨平台性和可靠性。

4 推送协议

消息推送常用的IM(即时消息)协议有XMPP(可扩展消息与存在协议)、MQTT(消息队列遥测传输协议)和SIP(会话初始协议)。

4.1 XMPP(可扩展消息与存在协议)

XMPP协议是一种流协议,使用TCP分片段传送XML,包含三种基本组成:客户端、服务器和网关,采用C/S架构进行异构的实时通信。服务器提供数据存储、连接的管理和信息路由功能,监听处理与客户端的连接,还可以与其他XMPP服务器通信。网关负责异构系统之间的互联,其中包含了多种协议转换,可以和其他各种类型的IM(即时消息)系统互联互通。客户端采用简单模式连接服务器,交换XML信息并进行解析,复杂处理由服务器进行。

4.2 SIP(会话初始协议)

SIP属于多媒体通信协议,运行在网络应用层上,使用范围广泛,在IP网络中支持语音和视频通话,也用于IM(即时消息系统)的消息推送。SIP协议采用C/S模式,基本功能有用户定位与判定、会话建立和管理等。SIP协议包含请求和响应的相关内容,提供了多种请求的消息,包括INVITE、ACK、BYE等,通过一组状态码定义会话过程中的不同状态。SIP协议作为文本协议,使用UDP或者TCP传输,对会话过程的步骤进行了明确的规定,使会话的建立、修改和终止在不同的终端之间方便进行。

4.3 MQTT(消息队列遥测传输协议)

MQTT 是基于发布/订阅模式的物联网协议,在TCP/IP协议上实现远程实时消息服务,用于物联网、移动应用等,能降低通信时使用的网络带宽并减少占用的设备资源。MQTT 协议提供三种身份:发布者(Publish)、代理(Broker)和订阅者(Subscribe),发布者和订阅者都是客户端,代理是服务器。MQTT协议传输的消息有主题(Topic)和负载(payload)两种,主题供订阅者订阅,负载是订阅主题后收到的内容。MQTT协议传输的数据包有固定头(Fixed header)、可变头(Vari⁃able header)和消息体(payload)三部分,固定头中有数据包类型和数据包标识,可变头在固定头和消息体之间,内容和报文类型有关,消息体中有消息的内容和客户相关信息。MQTT构建底层网络传输,建立客户端到服务器的连接,是基于字节流的双向传输。

4.4 推送协议的适用范围和特点

XMPP在即时通信系统中应用广泛,基于XML进行消息传送,提供点对点和多点通信,采用单向连接方式,由客户端向服务器发起连接,消息在客户端之间传输时采用转发方式。XMPP在推送方面支持较成熟,有开源的服务器和开发框架可用,在Java平台实现良好,开发简便,跨平台方面一般。XMPP所传输的消息内容丰富,消息解析便利,有利于复杂交互,提供各种各样的消息业务模式,如留言、群发、群聊、状态更新等,使用时服务器负荷较重。

MQTT采用发布订阅模式,使用代理转发消息,所传输的消息较轻,可靠性较强,物联网中使用较多,消息分发高效。MQTT在网络较差时也能有效传输,具有低延时且低消耗的特点;在即时通信中用于消息推送,但推送系统使用MQTT实现较复杂。

SIP在VoIP(语音通话技术)中的进行会话管理,用于即时通信时使用其扩展协议SIMPLE,提供连接的建立与维护,对于消息内容本身关注较少。传输的消息主要是基于文本的,消息体处理方面较弱,须编写专门的代码,对大数据量的语音、视频和文件的传输较便捷。

5 消息推送的实现技术

根据所使用的平台,消息类型和发送频率以及设备数量,选择消息推送的实现技术,跨平台的使用整合推送方案。除了各平台提供的适合消息推送的开发技术,手机厂家有自己的推送软件,IT行业厂商提供专业推送系统,物联网也有多种实现技术,以下是常用的几种。

5.1 AndroidPN

Android平台上的开源AndroidPN,为App提供推送各种类型消息的功能,它是基于XMPP协议,采用服务器和客户端模式实现。AndroidPN的主要组成部分是Asmack库和Mina库,Asmack库提供服务器通信功能,Mina库是使用NIO开发的网络通信框架。

AndroidPN的消息推送模式如图3所示,客户端使用Asmack库,发起连接后发送数据到服务器;服务器使用Mina库接收连接,然后发送返回的数据;连接建立后通过IOsession进行管理会话,业务逻辑处理由IOHandler实现。AndroidPN在客户端提供4个主要功能:身份验证、监听网络变化、监听手机网络状态和监听推送消息。客户端使用Socket连接服务器,生成用户id、账号和密码等信息,建立消息监听,接收到消息过滤后调用回调。客户端把要发送的消息封装成Packet数据包放到队列中,队列中的Packet数据包被读取后转成XML格式,通过PacketWriter发送。服务器端可以用openfire实现,包含两个部分,一部分是响应用户请求的Web服务器,还有一部分是服务器端的XMPP消息服务,在经过身份验证后和客户端建立长连接收发消息。服务器端的核心功能有会话管理、用户认证、用户登录状态维护和消息推送等。An⁃droidPN实现了事件驱动的异步网络API,注重消息发送的性能和功能扩展。

5.2 IBM WebSphere MQ Telemetry

IBM WebSphere MQ Telemetry 常用于物联网,提供基于WebSocket和MQTT协议的跨平台推送服务,在低带宽的环境中以低功耗完成消息传递,同时加强数据安全与数据监测。WebSphere MQ Telemetry提供WebSphere MQ作为服务器,客户端采用JavaScript编写的API,在任何设备上均可使用。连接由MQTT客户端向服务器发起;建立后发送心跳包维持连接;接着发送订阅消息来订阅某一主题;订阅确认后接收该主题的系列消息。消息推送由消息发布者客户端将业务数据封装到消息体中,以主题方式发布消息,再传送到订阅者客户端中。

上一篇 点击页面呼出菜单 下一篇