iOS 之XMPP原理

物联网协议对比(HTTP、websocket、XMPP、COAP、MQTT和DDS协议) 对于物联网,最重要的是在互联网中设备与设备的通讯,现在物联网在internet通信中比较常见的通讯协议包括:HTTP、websocket、XMPP、COAP、MQTT在互联网时代,TCP/IP协议已经一统江湖,现在的物联网的通信架构也是构建在传统互联网基础架构之上。在当前的互联网通信协议中,HTTP协议由于开发成本低,开放程度高,几乎占据大半江山,所以很多厂商在构建物联网系统时也基于http协议进行开发。包括google主导的physic web项目,都是期望在传统web技术基础上构建物联网协议标准。 阅读详情

XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。

  XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分;

 

在IETF 中,把IM协议划分为四种协议,即即时信息和出席协议(Instant Messaging and Presence Protocol, IMPP)、出席和即时信息协议(Presence and Instant Messaging Protocol, PRIM)、针对即时信息和出席扩展的会话发起协议(Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions, SIMPLE),以及可扩展的消息出席协议(XMPP)。最初研发IMPP 也是为了创建一种标准化的协议,但是今天,IMPP 已经发展成为基本协议单元,定义所有即时通信协议应该支持的核心功能集。

XMPP 和SIMPLE 两种协议是架构,有助于实现IMPP协议所描述的规范。PRIM 最初是基于即时通信的协议,与XMPP 和SIMPLE 类似,但是己经不再使用


1.    XMPP 协议是公开的,由JSF开源社区组织开发的。XMPP 协议并不属于任何的机构和个人,而是属于整个社区,这一点从根本上保证了其开放性。

2.    XMPP 协议具有良好的扩展性。在XMPP 中,即时消息和到场信息都是基于XML 的结构化信息,这些信息以XML 节(XML Stanza)的形式在通信实体间交换。XMPP 发挥了XML 结构化数据的通用传输层的作用,它将出席和上下文敏感信息嵌入到XML 结构化数据中,从而使数据以极高的效率传送给最合适的资源。基于XML 建立起来的应用具有良好的语义完整性和扩展性。

3.    分布式的网络架构。XMPP 协议都是基于Client/Server 架构,但是XMPP协议本身并没有这样的限制。网络的架构和电子邮件十分相似,但没有结合任何特定的网络架构,适用范围非常广泛。

4.    XMPP 具有很好的弹性。XMPP 除了可用在即时通信的应用程序,还能用在网络管理、内容供稿、协同工具、档案共享、游戏、远端系统监控等。

5.    安全性。XMPP在Client-to-Server通信,和Server-to-Server通信中都使用TLS (Transport Layer Security)协议作为通信通道的加密方法,保证通信的安全。任何XMPP服务器可以独立于公众XMPP网络(例如在企业内部网络中),而使用SASL及TLS等技术更加增强了通信的安全性。如下图所示:

 

 

XMPP协议的组成

主要的XMPP 协议范本及当今应用很广的XMPP 扩展:

RFC 3920 XMPP:核心。定义了XMPP 协议框架下应用的网络架构,引入了XML Stream(XML 流)与XML Stanza(XML 节),并规定XMPP 协议在通信过程中使用的XML 标签。使用XML 标签从根本上说是协议开放性与扩展性的需要。此外,在通信的安全方面,把TLS 安全传输机制与SASL 认证机制引入到内核,与XMPP 进行无缝的连接,为协议的安全性、可靠性奠定了基础。Core 文档还规定了错误的定义及处理、XML 的使用规范、JID(Jabber Identifier,Jabber 标识符)的定义、命名规范等等。所以这是所有基于XMPP 协议的应用都必需支持的文档。

RFC 3921:用户成功登陆到服务器之后,发布更新自己的在线好友管理、发送即时聊天消息等业务。所有的这些业务都是通过三种基本的XML 节来完成的:IQ Stanza(IQ 节), Presence Stanza(Presence 节), Message Stanza(Message 节)。RFC3921 还对阻塞策略进行了定义,定义是多种阻塞方式。可以说,RFC3921 是RFC3920 的充分补充。两个文档结合起来,就形成了一个基本的即时通信协议平台,在这个平台上可以开发出各种各样的应用。

XEP-0030 服务搜索。一个强大的用来测定XMPP 网络中的其它实体所支持特性的协议。

XEP-0115 实体性能。XEP-0030 的一个通过即时出席的定制,可以实时改变交变广告功能。

XEP-0045 多人聊天。一组定义参与和管理多用户聊天室的协议,类似于Internet 的Relay Chat,具有很高的安全性。

XEP-0096 文件传输。定义了从一个XMPP 实体到另一个的文件传输。

XEP-0124 HTTP 绑定。将XMPP 绑定到HTTP 而不是TCP,主要用于不能够持久的维持与服务器TCP 连接的设备。

XEP-0166 Jingle。规定了多媒体通信协商的整体架构。

XEP-0167 Jingle Audio Content Description Format。定义了从一个XMPP 实体到另一个的语音传输过程。

XEP-0176 Jingle ICE(Interactive Connectivity Establishment)Transport。ICE传输机制,文件解决了如何让防火墙或是NAT(Network Address Translation)保护下的实体建立连接的问题。

XEP-0177 Jingle Raw UDP Transport。纯UDP 传输机制,文件讲述了如何在没有防火墙且在同一网络下建立连接的。

XEP-0180 Jingle Video Content Description Format。定义了从一个XMPP 实体到另一个的视频传输过程。

XEP-0181 Jingle DTMF(Dual Tone Multi-Frequency)。

XEP-0183 Jingle Telepathy Transport Method。

XMPP协议网络架构

XMPP是一个典型的C/S架构,而不是像大多数即时通讯软件一样,使用P2P客户端到客户端的架构,也就是说在大多数情况下,当两个客户端进行通讯时,他们的消息都是通过服务器传递的(也有例外,例如在两个客户端传输文件时).采用这种架构,主要是为了简化客户端,将大多数工作放在服务器端进行,这样,客户端的工作就比较简单,而且,当增加功能时,多数是在服务器端进行.XMPP服务的框架结构如下图所示.XMPP中定义了三个角色,XMPP客户端,XMPP服务器、网关.通信能够在这三者的任意两个之间双向发生.服务器同时承担了客户端信息记录、连接管理和信息的路由功能.网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信)、MSN、ICQ等.基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML,工作原理是:

(1)节点连接到服务器;(2)服务器利用本地目录系统中的证书对其认证;(3)节点指定目标地址,让服务器告知目标状态;(4)服务器查找、连接并进行相互认证;(5)节点之间进行交互.

XMPP客户端

XMPP 系统的一个设计标准是必须支持简单的客户端。事实上,XMPP 系统架构对客户端只有很少的几个限制。一个XMPP 客户端必须支持的功能有:

1. 通过 TCP 套接字与XMPP 服务器进行通信;

2. 解析组织好的 XML 信息包;

3. 理解消息数据类型。

XMPP 将复杂性从客户端转移到服务器端。这使得客户端编写变得非常容易,更新系统功能也同样变得容易。XMPP 客户端与服务端通过XML 在TCP 套接字的5222 端口进行通信,而不需要客户端之间直接进行通信。

基本的XMPP 客户端必须实现以下标准协议(XEP-0211):

RFC3920 核心协议Core

RFC3921 即时消息和出席协议Instant Messaging and Presence

XEP-0030 服务发现Service Discovery

XEP-0115 实体能力Entity Capabilities

 

XMPP服务器

 

XMPP 服务器遵循两个主要法则:

l  监听客户端连接,并直接与客户端应用程序通信;

l  与其他 XMPP 服务器通信;

XMPP开源服务器一般被设计成模块化,由各个不同的代码包构成,这些代码包分别处理Session管理、用户和服务器之间的通信、服务器之间的通信、DNS(Domain Name System)转换、存储用户的个人信息和朋友名单、保留用户在下线时收到的信息、用户注册、用户的身份和权限认证、根据用户的要求过滤信息和系统记录等。另外,服务器可以通过附加服务来进行扩展,如完整的安全策略,允许服务器组件的连接或客户端选择,通向其他消息系统的网关。

基本的XMPP 服务器必须实现以下标准协议

RFC3920 核心协议Core

RFC3921 即时消息和出席协议Instant Messaging and Presence

XEP-0030 服务发现Service Discovery

 

 XMPP网关

 

XMPP 突出的特点是可以和其他即时通信系统交换信息和用户在线状况。由于协议不同,XMPP 和其他系统交换信息必须通过协议的转换来实现,目前几种主流即时通信协议都没有公开,所以XMPP 服务器本身并没有实现和其他协议的转换,但它的架构允许转换的实现。实现这个特殊功能的服务端在XMPP 架构里叫做网关(gateway)。目前,XMPP 实现了和AIM、ICQ、IRC、MSN Massager、RSS0.9 和Yahoo Massager 的协议转换。由于网关的存在,XMPP 架构事实上兼容所有其他即时通信网络,这无疑大大提高了XMPP 的灵活性和可扩展性。

 

XMPP地址格式

一个实体在XMPP网络结构中被称为一个接点,它有唯一的标示符jabber identifier(JID),即实体地址,用来表示一个Jabber用户,但是也可以表示其他内容,例如一个聊天室.一个有效的JID包括一系列元素:(1)域名(domain identifier);(2)节点(node identifier);(3)源(resource identifier).它的格式是node@domain/resource,node@domain,类似电子邮件的地址格式.domain用来表示接点不同的设备或位置,这个是可选的,例如a在Server1上注册了一个用户,用户名为doom,那么a的JID就是doom@serverl,在发送消息时,指明doom@serverl就可以了,resource可以不用指定,但a在登录到这个Server时,fl的JID可能是doom@serverl、exodus(如果a用Exodus软件登录),也可能是doom@serverl/psi(如果a用psi软件登录).资源只用来识别属于用户的位置或设备等,一个用户可以同时以多种资源与同一个XMPP服务器连接。

 

XMPP消息格式
XMPP中定义了       3个顶层XML元素: Message、Presence、IQ,下面针对这三种元素进行介绍。

 

<Message>

用于在两个jabber用户之间发送信息。Jsm(jabber会话管理器)负责满足所有的消息,不管目标用户的状态如何。如果用户在线jsm立即提交;否则jsm就存储。

To :标识消息的接收方。

from : 指发送方的名字或标示(id)o

Text: 此元素包含了要提交给目标用户的信息。

结构如下所示:

 

<message to= ‘lily@jabber.org/contact’ type =’chat’>

<body> 你好,在忙吗</body>

</message>

 

 <Presence>

用来表明用户的状态,如:online、away、dnd(请勿打扰)等。当用户离线或改变自己的状态时,就会在stream的上下文中插入一个Presence元素,来表明自身的状态.结构如下所示:

<presence>

From =‘lily @ jabber.com/contact’

To = ‘yaoman @ jabber.com/contact'

<status> Online </status>

</presence>

<presence>元素可以取下面几种值:

Probe :用于向接受消息方法发送特殊的请求

subscribe:当接受方状态改变时,自动向发送方发送presence信息。

 

 

< IQ >

一种请求/响应机制,从一个实体从发送请求,另外一个实体接受请求,并进行响应.例如,client在stream的上下文中插入一个元素,向Server请求得到自己的好友列表,Server返回一个,里面是请求的结果.

<iq > 主要的属性是type。包括:

Get :获取当前域值。

Set :设置或替换get查询的值。

Result :说明成功的响应了先前的查询。

Error: 查询和响应中出现的错误。

结构如下所示:

<iq from =‘lily @ jabber.com/contact’id=’1364564666’ Type=’result’>

12个iOS技术面试题及答案总结 ** 前言** 随着移动互联网科技不断的发展和创新,如今无论是公司还是开发者或设计师个人而言,面试都是一项耗时耗钱的项目,而面对iOS开发者及设计师在面试时可能会遇到的问题进行了筛选与汇总。下面我们一起来一下看看吧。 一、如何绘制UIView? 绘制一个UIView最灵活的方法就是由它自己完成绘制。实际上你不是绘制一个UIView,而是子类化一个UIView并赋予绘制自己的能力。当一个UIView需要执行绘制操作时,drawRect:方法就会被调用,覆盖此方法让你获得绘图操作的机会。当drawRect:方 阅读详情

相关推荐

【BBF系列协议】TR069/TR369设备管理

TR-069支持统一设备管理平台由全球数百家运营商和CSP部署,是一个全面整合、可扩展、强大的设备管理解决方案,使运营商能够自动化数据、VoIP、IPTV和FTTH的部署和支撑。解决方案提供和管理网关、路由器、IPTV、STB、IP电话、femtocells、移动热点、dongle、存储设备、ONT以及其他设备类型。针对TR-069(及其演进)的统一设备管理平台,部署、集成和使用都最为便捷。

开源物联网项目商业化作者 4228

Tigase8.1.2安装配置

tigase版本:8.1.2 官方文档地址:Tigase Administration Guide 安装 参考:Tigase Administration Guide 完全按官方文档安装有一些问题,本人遇到的问题是 HTTP REST SECURITY CONFIGURATION这个选项卡居然没有,这样就导致无法在安装时添加api key。后面又遇到无法登录 http://localhost:8080/admin 界面问题。可见官方文档也还是有点坑。 下载安装包并解压 https://g

ningkangming的博客 2723

使用XMPP和Openfire搭建即时通讯平台

XMPP(Extensible Messaging and Presence Protocol)是一个基于XML的开放即时通讯协议。它允许网络中实体之间通过发送XML格式的消息进行实时通讯,并支持在线状态的管理。因其开源性和可扩展性,XMPP被广泛应用于构建可互操作的即时通讯平台。Openfire是一个开源的即时消息服务器,使用XMPP协议实现客户端之间的通信。它以其轻量级、易于安装和配置,以及强大的可扩展性而闻名。

weixin_42627459的博客 1196

tigase8集群高可用

tigase8集群化搭建按官方文档来看,是很容易整的,但实际上,坑不少。摸索了好几天终于把tigase8集群化搞出来了。主要参考官方文档来安装:集群配置。

ningkangming的博客 1410

Tigase 概述

Tigase 概述,描述了1、为什么选择Tigase 2、RFC的实现 3、Tigase实现的XMPP扩展协议等

Nvidia Jetson CH340 驱动安装

最近调一个USB设备,Windows系统上是可以安装CH340 驱动使用的,移到Jetson AGX Orin 上发现没有 /dev/ttyUSB* 设备显示。是一个为盲人和视力障碍者提供的终端设备驱动程序,它会在系统启动时自动加载并占用串口设备,导致我们无法正常使用部分串口设备。安装完后,内核中已经有。

Vulcan_S的博客 1638

iOS即时通信之XMPP框架的使用及原理简介

XMPP框架的使用及原理

代码解释生活 3668

LLM - windows下的Dify离线部署:从镜像打包到无网环境部署(亲测,包含插件部署)

LLM - windows下的Dify离线部署:从镜像打包到无网环境部署(亲测,包含插件部署)

ocean00008899的博客 1285

IOS-XMPP

一、即时通讯技术简介 即时通讯技术(IM -- Instant Messaging)支持用户在线实时交谈。如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容 有许多的IM系统,如AOL、Yahoo IM、 MSN以及QQ,它们最大的区别在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议 协议用来说明信息在网络上如何...

weixin_30568715的博客 122

基于STM32F103C8T6的红外循迹避障小车

编程思路:控制核心板IO口的电平(即电机驱动模块的AIN1,AIN2,BIN1,BIN2)从而控制AO1、AO2、BO1、BO2的电平高低,进而控制电机使其正转、反转、不转。由于单纯地拉高拉低电平只能让电机在转与不转的状态切换,故决定利用TIM4的两个通道分别产生两路PWM信号来控制电机速度,四个电机两个一组,同一侧的两个连接在同一个PWM上。(#include "dianji.h"文件中同时写了对循迹模块引脚的初始化)

weixin_48743503的博客 1万+

别再怕ADRC调参了!手把手教你用MATLAB/Simulink搞定TD、ESO、NLSEF(附完整参数表)

本文详细解析了ADRC(自抗扰控制)的调参方法,通过MATLAB/Simulink实战演示,帮助工程师快速掌握TD、ESO和NLSEF模块的参数整定技巧。文章提供了完整的参数表和调参指南,解决ADRC调参难题,提升控制系统的鲁棒性和性能。

weixin_30252709的博客 177

iOS 开发 XMPP即时通讯项目开发(仿微信)-详解之XMPP入门

iOS 开发 XMPP即时通讯项目开发(仿微信)-详解之XMPP入门1.即时通信(Instant Message /IM)的含义即时通信软件发展产品最早的创始人是三个以色列青年,是他们在1996年做出来的,取名叫ICQ。1998年当ICQ注册用户数达到1200万时,被AOL看中,以2.87亿美元的天价买走。ICQ有1亿多用户,主要市场在美洲和欧洲,已成为世界上最大的即时通信系统。即时通讯技术(IM

高级软件开发工程师--周玉的博客 2544

一起学习Avalonia(十三)

Avalonia 前面已经简单介绍了一下相关开发,有一个系统的了解。 到今天Avalonia已经基本成熟,但是扩展支持的还是不可能达到大企业的,我估计这也不可能。考虑了下,微软的MAUI框架可能会普及性更高,Avalonia也是我无意间知道的。 微软毕竟是会宣讲的全球。并且微软全球研发投入很大,全部专职开发,这种速度当然大。但是MAUI根据计划,可能还要很长时间,而且是社区支持Linux,估计时间更久。这不能适应现在的国产化开发。 预计一段时间还是需要Avalonia作为优先。当前Avalonia使

jinyuttt的专栏 4086

XMPP 基础介绍 iOS导入XMPPFramework框架

即时通讯技术(IM -- Instant Messaging)支持用户在线实时交谈。如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容。 有许多的IM系统,如AOL、Yahoo IM、 MSN以及QQ,它们最大的区别在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议 协议用来说明信息在网络上如何传输,如果有了统一的传输协议,

zhaojian3513的专栏 888

【系统分析师】2025年下半年真题:案例分析-答案及详解(回忆版)

Redis相比Memcached在电商高并发场景下具有显著优势:支持持久化(RDB/AOF)、丰富数据结构(如有序集合实现排行榜)、原生支持集群和哨兵模式(高可用性)。布隆过滤器通过位数组和哈希函数预先存储所有合法订单ID,当查询请求到达时快速拦截无效ID(如伪造ID),避免其穿透缓存直接冲击数据库,从而预防缓存击穿问题。

数据知道的博客 5982

Modis数据处理工具:MRT百度网盘下载和手把手图文安装教程

如下图所示为MODIS Reprojection Tool(MRT)的软界面,看似简单,却是Modis遥感影像必不可少的处理工具,如投影变换等。本文以图文并茂的形式,详细讲解MRT软件在Windows10平台上的安装过程,并附MRT软件百度网盘下载地址。 Modis Tool主界面: 一、安装过程 1、安装Java运行环境 双击Java.exe,安装运行环境。默认的安装路径为C:\Program Files (x86)\Java\jre6\bin,后面需要用到这个路径。 等待...

智慧空间实验室 2622

iOS:XMPP即时聊天知识

XMPP即时聊天框架:XMPPFramework XMPP The Extensible Messaging and Presence Protocol(可扩展通讯和表示协议)。 基于XML XMPP是一个典型的C/S架构,而不是像大多数即时通讯软件一样,使用P2P客户端到客户端的架构 服务器:OpenFire 测试客户端:spark iOS开发框...

dienangpiao2051的博客 229

下载猫 —— 会员体系安全分析与加固方案

下载猫的会员验证体系完全失效,破解不需要任何工具链、不需要写代码、不需要改文件。已验证的成功攻击路径:攻击者启动软件时加一个参数,然后用 3 行 JavaScript 即可将会员状态改为"有效期至 2099 年",全部功能闸门放行。等价于普通用户按F12打开控制台输入 3 行代码,全程不到 10 秒。项目结论破解难度⭐ 极低(会按 F12 即可,无需任何破解工具)是否修改文件否(重启软件自动恢复)是否需要服务器否是否影响其他用户单人即可完成,可复制分发修复所需工作量。

猫敷雪 41

iOS--XMPP (可扩展消息处理现场协议) 即时通信协议

XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。               XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。               XMPP的地

转身扭到脖子的专栏 1852

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

iOS XMPP Framework 中文概述

本篇文章翻译XMPP Framework中的Overview of the XMPP Framework部分 介绍 The framework is divided into 2 parts: 1. xmpp核心部分 2. xmpp扩展(roster,XEP's,...

aoe41606的博客 98

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

XMPP介绍与用法

示例代码地址 核心文件 XMPPStream:开发中最主要交互的类,所有扩展和自定义代码都要通过这个类进行 XMPPParser:供XMPP解析使用 XMPPJID:提供一个不可变JID的实现 ,遵守NSCoping协议和NSCoding协议 XMPPElement: XMPPQ 请求 XMPPMessage 消息 XMPPPresence 出席 XMPPModule:开发XMPP扩展时使用 XMPPLogging:XMPP日志框架 XMPPInternal:整个XMPP框架内部使用的核心和高级底层

xymspace 1381

XMPP框架_IQ

在XMPP的《XMPP框架_协议》文章中介绍了很多XMPP的相关协议的内容,这些协议的实现都是基于IQ的。 IQ(info/query)是XMPP定义的的一种用来查询,发送请求等操作的指令工具集。 它为XMPP通讯提供了请求和响应机制,类似于http请求的GET/POST/PUT方法,有四种类型: get 对应http请求的GET set 对应http请求的POST result 请求...

sz_vcp2007的专栏 393
上一篇: iOS 之摇一摇
下一篇: iOS 之消息推送原理和实现
Shicuf
博客等级 码龄16年 11粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值