基于XMPP协议消息推送机制的研究与实现
- 格式:pdf
- 大小:1.09 MB
- 文档页数:5
2023年 / 第6期 物联网技术710 引 言物联网云平台主要为了满足物联网产品的云端接入服务、后台管理、APP 接口等方面的需求[1-4],云平台建设必须满足以下3个方面的要求:(1)平台伸缩性强,即能够满足前期的小规模部署,也能方便应对后期用户的规模化增长的需求;(2)平台的数据结构必须高度抽象,不能过多陷于具体某一款产品的定义和功能开发中;(3)云平台的代码应该应用目前主流的通用方法进行开发,便于开发人员的招聘以及项目的维护管理。
基于以上要求,同时考虑到系统的通用性、扩展性、高可用性等方面,系统必须采用分布式、节点多活的部署方式,将相关业务模块进行充分拆分,然后再对各个服务进行集群部署,以确保服务的高可用性。
1 框架设计整个系统选用MQTT 作为物联网通信协议标准,云平台架构如图1所示。
整个云平台需要提供对各类设备的接入和消息收发服务,除此之外还需要提供对APP 以及设备端的REST 服务。
消息服务器将只作为一个通道的功能存在,不进行业务逻辑的处理,MQTT 可以直接传输二进制数据,相对于XMPP 协议的XML ,效率更高,更轻量化。
所有暴露的接口和通道绑定域名地址,系统之间的数据交互跟IP 地址解耦。
搭建WebService 服务,开放统一的数据接口给APP/Web 客户端使用,管理人员在Web 控制台可以对设备进行管理。
物联网平台的建立需要经过一个设备量的增长过程,在平台建设初期,要充分考虑后期的系统扩容[5-7]。
云平台的任意节点均可以实现快速集群,系统可以根据业务发展情况,通过调整平台的集群部署结构,快速实现系统扩容。
图1 MQTT 物联网云服务系统架构1.1 新设备接入注册流程硬件设备需要在云端注册后,才能够正常使用,设备接入注册流程如图2所示。
注册时,需要给云端提供ProductKey 和Passcode ,云端根据ProductKey 和Passcode 以及随机数生成 Did 后返回给设备,设备收到后保存到FLASH 中,除非设备被Reset ,否则一直使用此Did 。
XMPP协议即时通讯(Openfire服务器版)一、什么是XMPPXMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的IM(IM:instant messaging,即时消息)协议之一。
XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML 环境中灵活的发展性。
XMPP中定义了三个角色,客户端,服务器,网关。
通信能够在这三者的任意两个之间双向发生。
服务器同时承担了客户端信息记录,连接管理和信息的路由功能。
网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ 等。
XMPP即时通信协议,采用C/S体系结构。
基本的网络形式是客户端连接到服务器,然后由服务器去连接到另一个客户端进行两个客户端之间的通信。
而他们传输的是XML流。
XMPP工作原理说明: 所有从一个客户端到另一个客户端的消息和数据都要通过服务器。
1、客户端连接服务器2、服务器利用本地目录系统的证书对其认证3、客户端制定目标地址,让服务器告知目标状态4、服务器查找,连接并进行相互认证5、客户端间进行交互二、搭建服务器(Openfire)通过上述的了解,我们知道要想进行通信,我们必须要有一个服务器。
服务器端采用Openfire作为服务器。
允许多个客户端同时登录并且并发的连接到一个服务器上。
服务器对每个客户端的连接进行认证,对认证通过的客户端创建会话,客户端与服务器端之间的通信就在该会话的上下文中进行。
首先安装Openfire点击继续点击安装安装成功后再偏好设置中就会有Openfire的图标。
点击Openfire的图标如果第一次安装Openfire,会发现Openfire的状态是停止的。
点击StartOpenfire,开启Openfire服务器注:如果Openfire一直打不开,请参考:/winer888/article/details/49886281当Status成为Running。
xmpp 协议XMPP(Extensible Messaging and Presence Protocol)是一种开放式的实时通信协议,用于消息传递和在线状态共享。
它是一个基于XML的协议,能够实现跨平台和跨网络的通信。
XMPP的设计目标是提供一种分布式、松散耦合的系统,可以在不同的软件和服务之间交换信息。
它的核心功能是实时消息传递和在线状态共享,但它也提供了几个扩展功能,例如文件传输、在线游戏、语音和视频通话等。
XMPP采用了一种分布式的体系结构,其中包括一个中央服务器和多个客户端。
客户端可以是桌面应用程序、移动应用程序或者Web应用程序。
其中一个最重要的特性是可扩展性,用户可以根据自己的需求添加额外的功能和扩展。
在XMPP中,用户通过注册一个JID(Jabber ID)来加入网络。
JID由用户名和域名组成,类似于电子邮件地址。
用户之间可以通过JID来发送消息,并且可以通过JID来查看用户的在线状态。
XMPP协议使用基于XML的消息格式来传输数据。
消息可以是纯文本,也可以包含附加的元数据和命令。
这种灵活性使得XMPP协议可以适应不同的应用场景。
XMPP还提供了一套通用的扩展机制,允许用户添加额外的功能。
这些扩展可以通过描述XML命名空间和XML元素来实现。
许多常见的扩展已经被定义,例如文件传输、语音和视频通话等等。
XMPP在实时通信领域有广泛的应用。
它被用于构建即时通讯应用程序,如Google Talk和Facebook Messenger。
它还被用于构建社交网络和在线游戏服务。
总结起来,XMPP协议是一种开放式的实时通信协议,提供了分布式、松散耦合的系统架构。
它通过基于XML的消息格式来传输数据,并支持扩展功能。
XMPP在实时通信领域有广泛的应用,并且可以适应不同的应用场景和需求。
网络协议知识:XMPP协议和MQTT协议的比较随着物联网技术的不断发展,越来越多的设备和系统需要进行实时通信和消息传输。
XMPP协议和MQTT协议是两种常用的网络通信协议,本文将对这两种协议进行比较,探讨它们的优缺点和适用场景。
一、XMPP协议XMPP(Extensible Messaging and Presence Protocol)被定义为一种开放式的标准,用于实现即时通信(IM)和在线状态(Presence)功能。
XMPP最初被用于Jabber系统,现在已成为一种通用协议,越来越多的应用在使用XMPP协议进行通信。
XMPP协议的优点:1、安全性高XMPP协议支持TLS / SSL加密协议,可以保护数据传输的安全性。
此外,XMPP还支持SASL授权协议,用户可以使用用户名和密码等凭据进行身份验证。
2、灵活性强XMPP协议是一种灵活的协议,可以根据需要进行扩展和定制。
这种灵活性使XMPP适合用于各种应用场景,从即时消息到实时位置更新等等。
3、消息传递速度快XMPP协议传输消息使用的是XML格式,这种格式通常比其他格式更快更高效。
因此,XMPP协议的消息传输速度相对较快。
XMPP协议的缺点:1、性能不如其他协议由于XMPP的XML格式较为复杂,因此其性能一般不如其他协议。
这也限制了XMPP协议在某些性能要求较高的场景中的应用。
2、开发难度较大由于XMPP协议的复杂性和灵活性,对于开发者而言,学习和掌握XMPP协议需要一定的时间和精力。
这也会增加XMPP协议的开发难度。
二、MQTT协议MQTT协议(Message Queue Telemetry Transport)是一种轻量级的、基于发布/订阅模式的通信协议,适用于各种物联网设备之间的通信。
MQTT协议的优点:1、简单易用MQTT协议非常简单,易于开发和使用。
它基于发布/订阅模式,支持多种消息格式,包括JSON、AVRO和XML等。
这使得MQTT协议成为物联网通信的首选协议之一。
即时通讯协议即时通讯协议是一种用于实时传输文本消息、音频和视频数据的通信协议。
它可以让用户之间通过网络进行实时的交流和沟通。
即时通讯协议在现代社会中起到了重要的作用,让人们可以随时随地与亲朋好友、同事和商业伙伴保持联系。
1. 概述即时通讯协议是一种基于网络的通信协议,用于实现即时消息传输。
它的主要特点是实时性和即时性。
用户可以通过即时通讯软件或应用程序在任何时间、任何地点与其他用户进行交流。
2. 常见的即时通讯协议2.1 XMPPXMPP(Extensible Messaging and Presence Protocol)是一种开放式的即时通讯协议。
它基于XML(可扩展标记语言)格式,可以实现实时消息传输、在线状态展示、文件传输等功能。
XMPP协议具有灵活的扩展性,可以根据需求定制各种功能。
2.2 SIPSIP(Session Initiation Protocol)是一种用于建立、修改和终止会话的通信协议。
它可以用于语音、视频和即时消息传输。
SIP协议是一种灵活的通信协议,可以与其他协议(如XMPP)结合使用,以实现更丰富的功能。
2.3 IRCIRC(Internet Relay Chat)是一种基于文本的即时通讯协议。
它最初用于互联网上的实时聊天,但现在也广泛应用于团队协作和开源项目中。
IRC协议具有简单、轻量级的特点,适合于低带宽环境下的通信。
2.4 WebSocketWebSocket是一种在单个TCP连接上进行全双工通信的协议。
它可以使客户端和服务器之间实现实时的双向通信。
WebSocket协议可以用于实现即时通讯功能,但它也可以用于其他领域,如实时游戏和推送服务。
3. 即时通讯协议的优点3.1 实时性即时通讯协议具有实时传输消息的特点,用户可以在几乎同时收到发送方发送的消息。
3.2 方便快捷即时通讯协议可以随时随地进行通信,不受时间和地点的限制。
用户可以通过手机、电脑等设备进行即时通讯。
即时通讯方案引言即时通讯是指通过网络实时传递消息的技术,它在现代社交网络和企业通信中扮演着重要的角色。
本文将介绍几种常见的即时通讯方案,包括基于开源软件的方案和云服务方案。
开源软件方案1. XMPPXMPP(Extensible Messaging and Presence Protocol)是一种开源的即时通讯协议,被广泛应用于聊天、实时协作和在线游戏等领域。
XMPP协议基于XML,具有良好的可扩展性和灵活性。
优点•开源:XMPP是一个开放的标准,广泛应用于各种服务器和客户端实现。
•可扩展:XMPP支持自定义扩展,可以根据需求增加新功能。
•跨平台:XMPP可以在不同操作系统和设备上运行,包括Windows、Linux、iOS和Android等。
缺点•复杂性:XMPP协议复杂度较高,实现和部署有一定的难度。
•性能:XMPP在大规模用户和高并发场景下性能可能受到限制。
•部署成本:自建XMPP服务器需要一定的硬件和网络资源。
2. MatrixMatrix是一个去中心化的通讯协议和开放标准,类似于XMPP,但更注重去中心化和用户隐私保护。
Matrix基于HTTP和JSON等现有技术,可以实现跨平台、跨网络的通讯。
优点•去中心化:Matrix不依赖中央服务器,可以由多个服务器组成一个分布式网络。
•用户隐私保护:Matrix提供端到端加密和身份验证等安全机制,保护用户通讯内容和身份信息。
•跨平台:Matrix支持在不同操作系统和设备间进行通讯。
缺点•发展相对较新:Matrix在市场上的应用和认可程度相对较低。
•可用性:Matrix的服务器和客户端数量有限,用户规模和生态系统相对较小。
云服务方案1. Firebase Cloud MessagingFirebase Cloud Messaging(FCM)是谷歌提供的一种云服务,专门用于在应用程序之间传递消息和推送通知。
FCM支持 Android、iOS 和 Web 平台,提供了一套简单易用的API和开发工具。
XMPP 协议1。
XMPP 优缺点XMPP (Extensible Messaging and Presence Protocol) (前称Jabber) 是一种以 XML 为基础的开放式即时通讯协议,是经由互联网工程工作小组(IETF)通过的互联网标准。
[1]1.1 XMPP 协议的优点1。
1.1 可扩展性XMPP 的数据传输基于 XML 格式,可扩展性强.XMPP 的核心协议栈(Core Stack) 部分只定义了基础的 Presence,Message,Iq 等最主要数据格式和传输逻辑,更多的功能则通过定义扩展 (Extensions) 实现.1.1.2 受 IETF 组织规范Internet Engineering Task Force (IETF)在2002年开始规范 XMPP 协议,使其协议的修订和扩展的添加都经过严格的流程审核,防止 XMPP 协议因缺乏标准而分裂.并且这也保证了 XMPP 协议是完全开放的。
1。
1。
3 应用广泛XMPP 协议的应用比其他开放即时通讯协议更为广泛.较有名的使用 XMPP 协议的聊天服务有 Google Gtalk 和 Facebook Chat 等。
此外,XMPP 在各平台下都有若干服务端、客户端和程序库的实现,二次开发时成本较低。
XMPP 协议的可扩展性和开放性是该协议被广泛应用的保证。
1。
2 XMPP 协议的缺点1。
2.1 不内置支持二进制数据的传输XMPP 的核心部分没有包含对二进制数据传输的支持,这使得 XMPP 的基本数据限定在文本文件范围内。
XMPP 社区认为,XMPP 应该用于传输 meta 信息,辅助其他应用进行协议握手,XMPP 本身不应负担海量信息的传输。
从当前流行的轻量化观点来看,XMPP 把二进制数据传输的协议移入核心栈,是符合了最小核心的需求.但同时却为实际应用中 XMPP 客户端传输二进制数据增加了开发扩展协议的负担。
1。
Android消息推送的Androidpn实现方式:(一)下载androidpn 服务器端与客户端的Demo并运行Android消息推送的Androidpn实现方式:(一)下载androidpn服务器端与客户端的Demo并运行androidpn是基于XMPP协议的用于向Android客户端推送文本信息的一套开源的工具。
它帮我们做了那些维护Socket长连接等等的事情。
在真正把它使用在我们的项目中之前,我们先领略一下推送。
第一步,下载androidpn服务器端与客户端。
网址:/projects/androidpn/files/第二步,启动服务器端与客户端,通过Web页面推送。
详细的步骤如下:---------------------------------------------------------------------(原文:/thread-101586-1-1.html )关于服务器端向Android客户端的推送,主要有三种方式:1.客户端定时去服务端取或者保持一个长Socket,从本质讲这个不叫推送,这是去服务端拽数据。
但是实现简单,主要缺点:耗电等2.Google的C2DM,具体不细说,缺点,服务器在国外,你懂得,不是很稳定。
3.XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性。
它的特点是将复杂性从客户端转移到了服务器端。
听说GTalk、QQ、IM等都用这个协议。
接下来说说XMPP 在android客户端上的应用。
分两部分:服务端搭建和客户端实现。
服务端搭建:如果想测试一下功能,直接用搭建好的服务就行,下载androidpn-server-0.5.0-bin.zip ,由于附件太大,上传不上来下载地址:/file/clot4cuz#点击bin目录下得run.bat,直接搭好服务,在浏览器上输入http://127.0.0.1:7070 就进入管理界面。
如下图:如果你想自己更改服务,下载附件androidpn-server-0.5.0-src.zip(303.73 KB, 下载次数: 11839)2011-10-27 17:12:42 上传下载次数: 11839,自行修改。
英文资料翻译****:******:***2015年06月XMPP协议1绪论1.1概述可扩展的消息和出席信息协议(XMPP)是一个可扩展标记语言XML应用,让任何两个或多个网络实体之间进行结构化和可扩展的准实时信息交流. 本文定义了XMPP的核心协议方法: XML流的配置和解除, 通道加密, 验证, 错误处理, 以及消息通讯基础, 网络可用性("presence"), 和请求-应答交互.1.2历史XMPP的基本语法和语义最开始是由Jabber开源社区开发的, 主要是在1999年. 2002年, 根据IMP-REQS ,XMPP工作组被允许基于Jabber协议开发一个适合IETF的即时消息和出席信息技术. 到了2004年10月, 发布了RFC3920 和RFC3921 , 意味着那时候XMPP的主要定义完成了.从2004年开始,互联网社区已经获得了广泛的XMPP实现和布署经验, 包括XMPP标准基金会(XSF)主持下开展的正式的互操作性测试. 本文全面整合了从软件开发者和XMPP服务提供者得到的反馈, 包含了一系列向后兼容的修改,见附录D . 结果是, 本文反映了互联网社区对于XMPP1.0核心功能的初步共识, 因此废止了RFC 3920.1.3功能汇总这个不规范的章节提供了一个方便开发者的XMPP功能汇总; 接下来的其他章节则是XMPP的规范定义.XMPP的目标是允许两个(或多个)实体通过网络来交换相关的小件结构化数据(所谓"XML节"). XMPP典型地使用分布式的客户端-服务器体系结构来实现, 这里客户端需要连接到一个服务器以获得对网络的访问,从而被允许和其他实体(可能在其他服务器上)交换XML节. 一个客户端连接到一个服务器,交换XML 节,以及结束连接,这样的流程如下:确定要连接的IP地址和端口号, 典型的做法是对一个合格的域名做出解析( 3.2 )打开一个传输控制协议TCP 连接通过TCP打开一个XML流 4.2握手最好使用传输层安全性TLS 来进行通道加密( 5 )使用简单验证和安全层SASL 机制来验证( 6 )绑定一个资源到这个流上( 7 )和其他网络上的实体交换不限数量的XML节( 8 )关闭XML流( 4.4 )关闭TCP连接在XMPP中, 一个服务器可以选择性地连接到另一个服务器以激活域间或服务器间的通讯. 这种情形下, 两个服务器需要在他们自身之间建立一个连接然后交换XML节; 这个过程所做的事情如下:1.确定要连接的IP地址和端口号, 典型的做法是对一个合格的域名做出解析( 3.2 )2.打开一个TCP连接3.打开一个XML流4.24.握手最好使用TLS来进行通道加密( 5 )5.使用简单验证和安全层SASL 机制来验证( 6 ) *6.交换不限数量的XML节,可以服务器之间直接交换,也可以代表每台服务器上的相关实体来交换,例如那些连到服务器上的客户端( 8 )7.关闭XML流( 4.4 )8.关闭TCP连接互操作性提示: 在本文写就的时候, 大多数已布署的服务器仍使用服务器回拨协议XEP-0220 来提供弱身份验证,而不是使用SASL的PKIX证书来提供强验证, 特别在这些情况下,SASL握手无论如何将不会得到强验证(例如, 因为TLS握手没有被对方服务器强制要求, 或因为当TLS握手时对方服务器提供的PKIX证书是自签名的并且之前没有被接受过); 细节请见XEP-0220 . 本文的解决方案显然提供了一个更高级别的安全性(参见13.6 ).本文指定了客户端如何连接到服务器以及基本的XML节语义. 然而, 本文不定义一个连接成功建立之后可能用来交换的XML节的"载荷"; 反之, 那些载荷被定义在各种XMPP扩展之中. 例如, XMPP-IM 定义了基本的即时消息和出席信息功能的扩展. 另外, XSF创造了各种扩展协议,即XEP系列XEP-0001 ,也为广泛的应用程序定义了扩展.1.4术语本文中的关键字"MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", 和"OPTIONAL" 的解释参见RFC 2119 关键字.特定的安全相关的术语的含义参见安全术语 ; 这些术语包括但不限于, "assurance", "attack", "authentication", "authorization", "certificate", "certification authority", "certification path", "confidentiality", "credential", "downgrade", "encryption", "hash value", "identity", "integrity", "signature", "self-signed certificate", "sign", "spoof", "tamper", "trust", "trust anchor", "validate", and "verify".特定的和证书,域名,应用服务身份相关的术语参见TLS-证书 ; 这包括但不限于, "PKIX certificate", "source domain", "derived domain", 以及身份类型"CN-ID", "DNS-ID", 和"SRV-ID".其他安全相关的术语定义于参考协议中(例如, "denial of service" (拒绝服务)定义于DOS 或"end entity certificate" (终端实体证书)定义于PKIX ).术语"whitespace" (空格) 用于指代XML 中任何匹配"S"的字符或字符串, 也就是说, 一个或多个满足ABNF 定义的SP, HTAB, CR, 或LF 规则的实例.术语"localpart" (本地部分), "domainpart" (域部分), 以及"resourcepart" (资源部分)定义于XMPP地址.术语"bare JID" (纯JID) 指代一个格式为<localpart@domainpart> (对于一个位于某个服务器上的帐户而言) 或<domainpart> (对于一个服务器而言) 的XMPP地址.术语"full JID" (全JID) 指代一个格式为<localpart@domainpart/resourcepart> (对一个典型的已授权客户端或和某个帐号相关的设备而言) 或<domainpart/resourcepart> (对于一个典型的资源或和某个服务器相关的文字)的XMPP地址.术语"XML stream" (也称为"stream" (流)) 定义于 4.1 .术语"XML stanza" (也称为"stanza" (节)) 定义于 4.1 . 有三种stanzas(节): message, presence, 和IQ ("Info/Query"的简称). 这些通讯原语分别定义于8.2.1 , 8.2.2 , 和8.2.3 .术语"originating entity" (原实体)指的是第一次生成一个发送到XMPP网络的stanza(节)的实体(例如, 一个已连接的客户端, 一个附加的服务, 或一个服务器). 术语"generated stanza" (生成的节)值的是生成的节那个节.术语"input stream" (输入流)指定这样一个XML流,服务器通过这个流从一个已连接的客户端或远端服务器接收数据, 而术语"output stream" (输出流)指定这样一个流,服务器通过这个流发送数据到一个已连接的客户端或远程服务器. 以下术语指定一些动作,处理从输入流收到的数据时服务器可以执行这些动作: route(路由):传递数据到一个远端服务器让它自行处理或最终递送到一个和远端服务器关联的客户端deliver(递送):传递数据到一个已连接的客户端ignore(忽略):丢弃数据不做任何处理或返回一个错误给发送者sender 当术语"ignore" (忽略)用于客户端处理收到的数据时, 短语"without acting upon it" (不做任何处理)明确的包括不展示任何数据给使用者(人).接下来的"XML符号" 被IRI 用于展示无法用仅用ASCII码呈现的字符, 本文的一些例子使用了类似"&#x...." 的格式来表现UNICODE 字符串(例如, 字符串"ř" 表示Unicode字符LATIN SMALL LETTER R WITH CARON); 这种形式是绝对不会在XMPP系统将通过网络发送的.和URI 展现统一资源定位符的规则一样, XMPP地址文本也是用'<' 和'>' 括起来的(尽管基本上它们不属于URIs).例如, 被括起来的行是用来提高可读性的, "[...]" 表示省略, 并且还是用了以下预定义字符串(这些预定义的字符串不会通过网络发送出去):∙C: = 客户端∙E: = 任何XMPP实体∙I: = 发起实体∙P: = 对端服务器∙R: = 接收实体∙S: = 服务器∙S1: = 服务器1∙S2: = 服务器2读者需要注意这些例子不包括细节, 并且例子里的一些协议流程中, 展示的备用步骤不一定是由前一个步骤发送的确切的数据触发的; 本文或常用参考文档中的协议规范所用到的所有用例里面提供的例子都遵从上述规则. 所有例子都是虚构的并且交换的信息(例如, 用户名和密码) 不代表任何现存的用户和服务器.2体系结构XMPP提供一种异步的端到端的结构化数据交换技术,在一个分布式的可全球寻址和出席信息感知的客户端和服务器的网络中使用直接的持久XML流。