XMPP 协议的原理和介绍
XMPP 协议是什么:
XMPP 是用于即时通讯的扩展标记语言(XML)协议,它用于即时消息和在线现场的探测,它基于服务器--客户端的架构
XMPP 的优点:
1、XMPP 协议是公开的,并不属于某个机构或者个人
2、XMPP 协议具有良好的扩展性,XMPP 充分的发挥了 XML 结构化数据的通用传输层的作用,它将出席和上下文敏感信息嵌入到 XML 结构化数据中,从而使得数据以高效率传送。
3、分布式的网络架构、它是基于服务器和客户端是分离的,但是XMPP本身并没有这样的限制
4、XMPP 具有很好的弹性、它不仅仅用于即时通信的应用程序、还可以适用于网络管理、协同工具、远端系统监控等。
5、安全性 XMPP 的服务器-客户端通信和客户端服务器通信都采用的是 TLS 协议作为信道通信的加密方法,保证了通信的安全性。
XMPP 的网络架构:
XMPP是一个典型的C/S架构,而不是像大多数即时通讯软件一样,使用P2P客户端到客户端的架构,也就是说在大多数情况下,当两个客户端进行通讯时,他们的消息都是通过服务器传递的(也有例外,例如在两个客户端传输文件时).采用这种架构,主要是为了简化客户端,将大多数工作放在服务器端进行,这样,客户端的工作就比较简单,而且,当增加功能时,多数是在服务器端进行.XMPP服务的框架结构如下图所示.XMPP中定义了三个角色,XMPP客户端,XMPP服务器、网关.通信能够在这三者的任意两个之间双向发生.服务器同时承担了客户端信息记录、连接管理和信息的路由功能.网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信)、MSN、ICQ等.基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML,工作原理是:
- 节点连接到服务器;
- 服务器利用本地目录系统中的证书对其认证;
- 节点指定目标地址,让服务器告知目标状态;
- 服务器查找、连接并进行相互认证;
- 节点之间进行交互。
简单的 XMPP 协议通信流程
1、首先,由客户端连接到服务器,客户端通过IO流发送一段XML文件,在文件中包含了自身的用户名和密码
2、服务器端接收到客户端的XML文件,从中获取用户名和密码进行验证,如果验证成功,服务器会发送一个XML文件给客户端表明已经登录成功。
3、登陆成功后,客户端可以通过发送一个获取好友名单的XML文件,服务器会将当前用户的好友以XML文件传到客户端。
4、客户端选择一个好友,向其发送信息(其实是向服务器发送,服务器收到后会转发给对应的好友),好友收到
XMPP 协议中的一些概念
地址:一个实体在XMPP网络结构中被称为一个节点,它有唯一的标示符jabber identifier(JID),即实体地址,用来表示一个用户,但是也可以表示其他内容。例如一个聊天室.一个有效的JID包括一系列元素:(1)域名(domain identifier);(2)节点(node identifier);(3)源(resource identifier).它的格式是node@domain/resource,node@domain,类似电子邮件的地址格式
XML 流:即时通信的聊天是指二进制流或者是字节流
客户端XML 流:
<?xml version='1.0'?>
<stream:stream
to='example.com'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>
服务器 XML 流:
<?xml version='1.0'?>
<stream:stream
from='example.com'
id='someid'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>
XMPP 协议的原理和介绍相关推荐
- XMPP协议实现原理介绍
原文地址为: XMPP协议实现原理介绍 本文介绍XMPP协议原理及相关信息. XMPP协议简介 XMPP(Extensible Messageing and Presence Protocol:可 ...
- XMPP协议的原理介绍
XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测.它在促进服务器之间的准即时操作.这个协议可能最终允许因特网用户向因特网上的其他任何人发送 ...
- 【XMPP】XMPP协议之原理篇
XMPP协议简介 XMPP协议(Extensible Messaging and Presence Protocol,可扩展消息处理现场协议)是一种基于XML的协议. 目的是为了解决及时通信标准而提出 ...
- XMPP协议简单介绍
2019独角兽企业重金招聘Python工程师标准>>> 由于博客迁移至www.coderyi.com,文章请看http://www.coderyi.com/archives/434 ...
- 【XMPP 协议介绍】
中文名 可扩展通讯和表示协议 外文名 Extensible Messaging and Presence Protocol 外语缩写 XMPP 功 能 XMPP用TCP传的是XML流 XMPP是 ...
- xmpp协议抓包_开源网络抓包与分析框架学习-Packetbeat篇
开源简介 packbeat是一个开源的实时网络抓包与分析框架,内置了很多常见的协议捕获及解析,如HTTP.MySQL.Redis等.在实际使用中,通常和Elasticsearch以及kibana联合使 ...
- RFC3920 xmpp协议
RFC3920 "原文来自RFC 3920"可扩展的消息和出席信息协议 (XMPP): 核心协议 关于本文的说明 本文为互联网社区定义了一个互联网标准跟踪协议,并且申请讨论协议和提 ...
- android 通过xmpp即时聊天客户端往服务器发消息,利用XMPP协议推送服务器告警信息到安卓平台及桌面...
XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议. XMPP目前被IETF国际标准组织完成了标准化工作.标准化的核心结果分为两部分: 核心的XML流传输协议 基于XML流传输的即时 ...
- java xmpp实例,XMPP协议学习笔记一
即时通讯技术简介 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容.大多数常用的即时通讯发送程序都会提 ...
最新文章
- Spring-Retry重试实现原理
- liuux/ Unix 文件管理命令(三)
- SameNameFile 比较两个文件夹是否同名
- leetcode 357. Count Numbers with Unique Digits | 357. 计算各个位数不同的数字个数(Java)
- expect() php,Linux expect 的安装
- python输入float_python – 在tensorflow中创建一个float64变量
- [转]Android 之 Window、WindowManager 与窗口管理
- 十天冲刺开发第一天个人工作总结
- win10安装tomcat9
- python判断安全密码_python 字符串实例:检查并判断密码字符串的安全强度
- ubuntu 安装sougou 输入法
- BeetlSql中的Mapper
- 矢量控制开发笔记1—SVPWM基础
- CSDN文章自动展开全文无需登录插件(仅限Chrome)!
- Xcode中使用自定义字体
- Delphi中打开网页连接的几种方法
- 源生代码封装轮播效果
- python中计算区间内的质子数
- 关于MySQL,你未必知道的!
- Google浏览器搜索简述