XMPP协议分析-原理篇

[iPhone高级] 基于XMPP的IOS聊天客户端程序(XMPP服务器架构) 最近看了关于XMPP的框架,以文本聊天为例,需要发送的消息为: helloWord 基中from是从哪个用户发送的消息,to是发给谁的消息,XMPP的用户都是以邮箱形式。body就是我们发送的消息文本。 好了,说到这里,我们就来开发一个基于XMPP的IOS聊天客户端程序,首先我们需要XMPP服务器,这里,我就拿本机做服务器,首先从xmpp Server下载ejabberd这个服务 阅读详情

 XMPP协议简介

XMPP协议(Extensible Messaging and PresenceProtocol,可扩展消息处理现场协议)是一种基于XML的协议,目的是为了解决及时通信标准而提出来的,最早是在Jabber上实现的。它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。并且XML很易穿过防火墙,所以用XMPP构建的应用不易受到防火墙的阻碍。利用XMPP作为通用的传输机制,不同组织内的不同应用都可以进行有效的通信。

 

XMPP协议特点

1)所有XMPP信息都是以XML为基础的,信息交换的事实标准,扩展性强

2XMPP系统是一个分布式系统,每台服务器控制自己的资源,但是如果需要,它能与外在的系统进行通信。XMPP服务器利用开放的XML协议来进行S2S(Serverto Server)通信,就像在C2S(Client to Server)一样。相比之下,大多数的IM系统使用了只是支持C2S/S2C通信的协议,因此Jabber/XMPP服务器具有更大的灵活性。

3XMPP协议是公开的,程序则开放源代码。定义了客户端和服务器端的交互要经由XML流。普通消息类型(message),如改变状态(presence),传递消息内容或查询/更新(info/quey)应用则用每个指定的命名空间(namespace)来建立。

4)状态(Presence)在整个持久连接中。通过持久连接的有效维持,XMPP协议一直有在网络中维持存在和可用信息的能力。

5XMPP允许建立并行的TCP套接字连接对所有连接上的客户端和服务器端。一旦建立连接,则只有当状态改变,例如存在的改变,通过这个连接传输数据。既然这个连接是持久的,那么设置、认证、状态查找功能都不用每次都重复执行。这种持久的套接字的连接使得XMPP能够更有效的支持高级的具有存在能力的应用在带宽和处理资源的使用中。

6Jabber/XMPP系统是模块化的,而且Jabber/XMPP的设计强调如何实现可伸缩性、安全性和可扩展性。

 

XMPP协议分析

       XMPP中定义了三个角色:客户端,服务器,网关。

通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS

(短信),MSNICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML

 

       XMPP的基本网络结构如下:

C1----S1---S2---C3

|

C2----+--G1===FN1===FC1

符号表示:C1,C2,C3=XMPP客户端;S1,S2=XMPP;服务端G1=XMPP和使用外部消息网络(非XMPP)的协议之间转换的网;FN1=外部消息网络;FC1=外部消息网络的客户端。

 

1)服务器

服务系统是XMPP通信的智能提取层,它主要负责:管理来自其他个体的会话连接或者XML流(streams)和来自客户端、服务器、其他个体的认证发送在XML流实体之中的适当的XML地址节点。大多数XMPP服务都允许存储一些客户端数据(比如联系人列表),在这种情况下,服务直接面向这个客户端处理XML数据,而不是其他个体。

2)客户端

大多数客户端是通过TCP直接连接,并且使用XMPP获得服务器提供全部-12-2Jabber协议原理及其应用功能和其他服务。许多资源通过认证的客户端也许同时连接到服务器,定义在XMPP地址的每个资源是不同的(比如<node@domain/home><node@domain/work>)建议服务器和客户端采用的端中是5222

3)网关

它的主要功能是将XMPP协议转换成外部消息(non-XMPP)系统使用的协议,也将返回的数据转换成XMPP。这些通信是基于网关和服务器,基于网关和外部消息系统之间的。

 

XMPP消息格式

Jabber/XMPP系统使用XML流在不同实体之间相互传输数据。在两个实体的连接期间,XML流将从一个实体传送到另一个实体。在实体间,有三个顶层的XML元素:<message/><presence/><iq/>。每一个都包含属性和子节点。下面将分别描述这些元素。

1)消息(message)元素:

一个即时消息系统最基本的功能就是能够在两个用户之间实时交换消息,<message/>元素就提供了这个功能。每条消息都有一个或多个属性和子元素。属性“from”和“to”分别表示了消息发送者和接收者的地址。<message/>也可以包含一个“type”属性,这给接收者一个提示,这个消息是什么样的消息。表3-1给出了“type”属性的可能取值。<message/>中也可以包含“id”属性,用来唯一的标识一个输出消息的响应。

       2)状态(presence)元素:

<presence/>元素用来传递一个用户的存在状态的感知信息。用户可以是“available”,要么是“unavailable”,“Hide”等。当用户连接到即时消息服务器后,好友发给他的消息就立即被传递。如果用户没有连接到服务器,好友发给他的消息将被服务器存储起来直到用户连接到服务器。用户通过即时消息客户端自己控制可用性。但是,如果用户断开了同服务器的连接,服务器将发送给订阅了这个用户的存在信息的用户通知他们用户已经不可用。<presence/>还包含了两个子元素:<show/><status/><status>包含了一个对<show/>的文本描述。

3)IQ(Info<Query)元素

IQ元素是Jabber/XMPP消息协议的第三个顶层元素。IQ代表"Info/Query",用来发送和获取实体之间的信息。IQ消息是通过“请求/响应”机制在实体间进行交换的。IQ元素用于不同的目的,它们之间通过不同的命名空间来加以区分。在Jabber/XMPP消息协议里有许多的命名空间,但最常用的命名空间是:"jabber:iq:register","jabber:iq:auth","jabber:iq:roster"

上面描述了Jabber协议的三个顶层节点。通过这种格式Jabber消息不仅可以是简单的文本(text),而且可以携带复杂的数据和各种格式的文件,也就是说Jabber不仅可以用在人与人之间的交流,而且可以实现软件与软件或软件与人之间的交流。Jabber的这种功能大大扩展了即时通信的应用范围。

XMPP工作机制

       例如:一个终端名字是Remeo,通过服务器montague.lit与其他的用户相连,其他的用户

通过服务器juliet@capulet.lit建立连接。

第一步Romeo开始通过发送一个stream包与服务器montague.lit取得联系,这一步包含了鉴权,登录等等。

第二步Romeo获取了他的联系人列表,通过向服务器montague.lit发送<iq/>字段请求,按照下面的协议。

<iq type=‘get’from=‘romeo@montague.lit/pda’>

<query xmlns=‘jabber:iq:roster’/>

</iq>

<iq type=‘result’to=‘romeo@montague.lit/pda’>

<query xmlns=‘jabber:iq:roster’>

<item jid=‘juliet@capulet.lit’/><item jid=‘mercutio@shakespeare.lit’/>

<item jid=‘benvolio@shakespeare.lit’/>

</query>

</iq>

第三步Romeo发送了一个presence请求到服务器montague.lit,然后会将这个信息广播到他的所有好友。

<presence from=‘romeo@montague.lit/pda’/>

<presence from=‘romeo@montague.lit/pda’to=‘juliet@capulet.lit’/>

<presence from=‘romeo@montague.lit/pda’to=‘mercutio@shakespeare.lit’

/>

<presence from=‘romeo@montague.lit/pda’to=‘benvolio@shakespeare.lit’

/>

第四步如果Romeo的联系人都在线,就会将presence回复给Romeo,告知自己的状态。

<presence to=‘romeo@montague.lit/pda’from=‘juliet@capulet.lit/balcony’/>

<presence to=‘romeo@montague.lit/pda’from=‘juliet@capulet.lit/chamber’/>

<presence to=‘romeo@montague.lit/pda’from=‘mercutio@shakespeare.lit/home’/>

第五步RomeoJuliet开始交换信息,进行聊天。

<message from=‘romeo@montague.lit/pda’to=‘juliet@capulet.lit’>

<body>hi!</body>

</message>

<message from=‘juliet@capulet.lit/balcony’to=‘romeo@montague.lit/pda’

<body>hi yourself!</body>

</message>

 

以文档的观点来看,客户端或服务器发送的所有XML文本连缀在一起,从<stream></stream>构成了一个完整的XML文档。其中的stream标签就是所谓的XML Stream。在<stream></stream>中间的那些<message>...</message>这样的XML元素就是所谓的XML StanzaXML节)。XMPP核心协议通信的基本模式就是先建立一个stream,然后协商一堆安全之类的东西,中间通信过程就是客户端发送XML Stanza,一个接一个的。服务器根据客户端发送的信息以及程序的逻辑,发送XML Stanza给客户端。但是这个过程并不是一问一答的,任何时候都有可能从一个方发信给另外一方。通信的最后阶段是</stream>关闭流,关闭TCP/IP连接。

XML:

下一篇将使用WireShark分析具体数据包。

 

VisionPro 9.0 QuickBuild里用C#脚本调用Halcon 23.11模型,保姆级图文配置流程 本文详细介绍了如何在VisionPro 9.0 QuickBuild环境中使用C#脚本调用Halcon 23.11深度学习模型,提供从环境配置到模型集成的保姆级图文教程。重点解决图像格式转换、许可证配置等工业视觉检测中的常见问题,帮助开发者快速实现高效、稳定的视觉检测流水线部署。 阅读详情

相关推荐

PX4飞控 vs 大疆A3:开源与闭源方案在无人机硬件架构中的实战对比

本文深入对比了PX4飞控与大疆A3在无人机硬件架构上的差异,分析了开源与闭源方案在工业级无人机开发中的优劣势。通过详细的硬件配置、传感器兼容性、扩展能力及性能测试数据,为开发者提供选型指南,特别适合需要自定义算法和复杂功能集成的项目。

a3b4c5的博客 845

XMPP——xmpp客户端、服务器、网关以及地址和消息格式详解

接着上一篇文章继续学习和总结。。 XMPP客户端 XMPP 系统的一个设计标准是必须支持简单的客户端。事实上,XMPP 系统架构对客户端只有很少的几个限制。一个XMPP 客户端必须支持的功能有: 通过 TCP 套接字与XMPP 服务器进行通信; 解析组织好的 XML 信息包; 理解消息数据类型。 至于对客户端为何要求如此简单,概括来说就是,xmpp把相关更多功能...

weixin_33859504的博客 370

Tigase服务器7.0.2:XMPP服务器详解与实战指南

在当今数字时代,即时通讯服务变得不可或缺,而Tigase服务器作为XMPP协议的开源实现,一直致力于为全球用户提供安全、高效和可扩展的即时通讯解决方案。最新版本的Tigase服务器7.0.2的发布,标志着该平台在性能、安全性和用户体验方面都迈出了重要的步伐。本章旨在对Tigase服务器7.0.2进行概述,为读者提供一个了解其架构、功能和改进的起点。在接下来的章节中,我们将深入探讨XMPP协议的基础知识、Tigase 7.0.2版本的新特性、性能优化、安全强化措施以及如何监控和维护服务器等关键主题。

weixin_42234168的博客 992

XMPP本地服务器搭建

XMPP本地服务器搭建 按照安装向导逐步

ID314846818的博客 1095

iOS 的 XMPPFramework 简介

XMPPFramework是一个OS X/iOS平台的开源项目,使用Objective-C实现了XMPP协议(RFC-3920),同时还提供了用于读写XML的工具,大大简化了基于XMPP的通信应用的开发。 1. 登录和好友上下线 1.1XMPP中常用对象们 XMPPStreamxmpp基础服务类 XMPPRoster:好友列表类 XMPPRosterCoreDa...

weixin_30672295的博客 330

xmpp-server快速入门指南

xmpp-server快速入门指南 一、项目目录结构及介绍 该项目的目录结构设计遵循了一定的标准实践,下面是对主要目录和文件的简介: ├── LICENSE.md # 许可证文件,描述了软件使用的许可条款。 ├── README.md # 项目快速入门和概述的说明文档。 ├── bin # 启动脚本和其他命令行工具所在的目录。 │ └── xmp...

gitblog_00828的博客 678

XMPP协议分析-原理篇 XMPP协议简介

XMPP协议(Extensible Messaging and PresenceProtocol,可扩展消息处理现场协议)是一种基于XML协议,目的是为了解决及时通信标准而提出来的,最早是在Jabber上实现的。它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。并且XML很易穿过防火墙,所以用XMPP构建的应用不易受到防火墙的阻碍。利用XMPP作为通用的传输机制,不

迦南的专栏 742

XMPP即时通讯机制

XMPP(Extensible Messaging and Presence Protocol)可扩展消息呈现处理协议,一种基于XML协议。1、 XMPP可以实现多个客户端、多个服务器、多个网关的即时通讯 ; 2、 通常客户端与服务器连接的端为:5222,服务器服务器连接的端口为5269; 3、 XMPP网络上进行通讯,所以每个通讯实体都有一个地址,这个地址通常包含三个字段:Domai

Wake_me_Up123的博客 2003

在Linux上搭建XMPP服务器

1.搭建前准备    a. 64位 Linux服务器(windows,Mac上虚拟机均可以)一个,我是使用的是centos 6.5    b.下载 所需要的 ejabberd-15.07-linux-x86_64-installer.run 网盘地址:http://pan.baidu.com/s/1i33vmrN    c.将ejabberd-15.07-linux-x86_6

chmod_R_755的专栏 4288

即时通讯服务服务器 ejabberd、jabber、jabberd、xmpp简介

Jabber是著名的即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用。 XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。XMP...

书写人生 3864

xmpp 服务研究(一)

uwfallow5222/tcp显示地加下防火墙。原来没有开,客户端是连不上的!我们在10.60.100.196上搭建了一个jitsi,其中包含prosody.我们想研究下xmpp的相关特性与功能,所以搭个客户端用下。只有匿名注册,当要真实去注册,时,报这个错误!......

dualvencsdn的博客 581

xmpp版即时聊天

1.即时聊天简单介绍,socket通信 1.即时聊天的解决方案 * socket: * xmpp:xmpp+openfire+asmack 2.环信--------即时通讯云领导者:http://www.easemob.com/ 3.socket:套接字,连接需要`ip`和`端口`,分为tcp和udp两种形式      代码   2.xmpp协议的介绍

LLLigj博客 6093

fbx20133_converter_win_x64.exe

使用FBX转换器,可以快速轻松地将文件从一种文件格式传输到另一种文件格式。此实用程序使您能够将OBJ、DXF、DAE和3DS文件转换为FBX格式的多个版本或从多个版本转换而来。新工具现已在FBX转换器上推出。您可以使用FBX浏览器实时查看FBX动画文件,使用FBX浏览器浏览和比较FBX文件内容,使用FBX拍摄管理器管理动画拍摄。

上一篇: 推荐个C++库收集网站
下一篇: 经典技术类图书收藏
xutaozero21
博客等级 码龄19年 113粉丝 40原创
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值