xmpp协议学习!!!

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

       XMPP 是一种很类似于http协议的一种数据传输协议,它的过程就如同“解包装--〉包装”的过程,用户只需要明白它接受的类型,并理解它返回的类型,就可以很好的利用xmpp来进行数据通讯。

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

  • 核心协议
  • 扩展协议(XEP: XMPP Extension Protocol)
XMPP的核心协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。
XMPP的扩展协议是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。
XMPP的扩展协议Jingle使得其支持语音和视频。 
XMPP的官方文档是RFC 3920。

二、网络结构

        XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。


注意,分属于不同server的client之间要通信的话,中间不能再经过其他server,这2个server必须直接通信。对于XMPP来说,server不能象email server那样,中间可以经过若干个server才能把邮件发送到目的地。

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

  • 通过 TCP 套接字与XMPP 服务器进行通信;
  • 解析组织好的 XML 信息包;
  • 理解消息数据类型。
XMPP 将复杂性从客户端转移到服务器端。这使得客户端编写变得非常容易,更新系统功能也同样变得容易。XMPP 客户端与服务端通过XML 在TCP 套接字的5222 端口进行通信,而不需要客户端之间直接进行通信。

基本的XMPP 客户端必须实现以下标准协议(XEP-0211):
  • RFC3920 核心协议Core
  • RFC3921 即时消息和出席协议Instant Messaging and Presence
  • XEP-0030 服务发现Service Discovery
  • XEP-0115 实体能力Entity Capabilities

2.2 XMPP服务器

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

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

基本的XMPP 服务器必须实现以下标准协议
  • RFC3920 核心协议Core
  • RFC3921 即时消息和出席协议Instant Messaging and Presence
  • XEP-0030 服务发现Service Discovery

2.3 XMPP网关

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


三、系统特点

  • 客户机/服务器通信模式;
  • 分布式网络;
  • 简单的客户端;
  • XML的数据格式;
四、地址格式
XMPP的地址叫做JabberID(简写为JID),它用来标示XMPP网络中的各个XMPP实体。JID由三部分组成:domain,node identifier和resource。JID中domain是必不可少的部分。注意:domain和user部分是不分大小写的,但是resource区分大小写。

jid = [ node "@" ] domain [ "/" resource ]  

domain = fqdn / address-literal  

fqdn = (sub-domain 1*("." sub-domain))  

sub-domain = (internationalized domain label)  

address-literal = IPv4address / IPv6address  

domain:通常指网络中的网关或者服务器。
node identifier:通常表示一个向服务器或网关请求和使用网络服务的实体(比如一个客户端),当然它也能够表示其他的实体(比如在多用户聊天系统中的一个房间)。
resource:通常表示一个特定的会话(与某个设备),连接(与某个地址),或者一个附属于某个节点ID实体相关实体的对象(比如多用户聊天室中的一个参加者)。

JID种类有:
  • bare JID:user@domain.tld
  • full JID:user@domain.tld/resource
例子:
stpeter@jabber.org:表示服务器jabber.org上的用户stpeter。
room@service:一个用来提供多用户聊天服务的特定的聊天室。这里 “room“ 是聊天室的名字, ”service“ 是多用户聊天服务的主机名。
room@service/nick:加入了聊天室的用户nick的地址。这里 “room“ 是聊天室的名字, ”service“ 是多用户聊天服务的主机名,”nick“ 是用户在聊天室的昵称。

为了标示JID,XMPP也有自己的URI,例如xmpp:stpeter@jabber.org,默认规则是在JID前加 xmpp:。

五、通信原语
XMPP通信原语有3种:message、presence和iq。
5.1 message
message是一种基本推送消息方法,它不要求响应。主要用于IM、groupChat、alert和notification之类的应用中。
主要 属性如下:
5.1.1  type属性,它主要有5种类型:
  • normal:类似于email,主要特点是不要求响应;
  • chat:类似于qq里的好友即时聊天,主要特点是实时通讯;
  • groupchat:类似于聊天室里的群聊;
  • headline:用于发送alert和notification;
  • error:如果发送message出错,发现错误的实体会用这个类别来通知发送者出错了;
5.1.2  to属性:标识消息的接收方。
5.1.3  from属性:指发送方的名字或标示。为防止地址外泄,这个地址通常由发送者的server填写,而不是发送者。

载荷(payload):例如body,subject

例子:
<message 
  to="lily@jabber.org/contact" 
  type="chat" >
    <body> 你好,在忙吗</body>
</message>

5.2 presence
presence用来表明用户的状态,如:online、away、dnd(请勿打扰)等。当改变自己的状态时,就会在stream的上下文中插入一个Presence元素,来表明自身的状态。要想接受presence消息,必须经过一个叫做presence subscription的授权过程。
5.2.1 属性:
5.2.1.1 type属性,非必须。有以下类别
  • subscribe:订阅其他用户的状态
  • probe:请求获取其他用户的状态
  • unavailable:不可用,离线(offline)状态
5.2.1.2 to属性:标识消息的接收方。
5.2.1.3 from属性:指发送方的名字或标示。

5.2.2 载荷(payload):
5.2.2.1 show:
  • chat:聊天中
  • away:暂时离开
  • xa:eXtend Away,长时间离开
  • dnd:勿打扰
5.2.2.2 status:格式自由,可阅读的文本。也叫做rich presence或者extended presence,常用来表示用户当前心情,活动,听的歌曲,看的视频,所在的聊天室,访问的网页,玩的游戏等等。
5.2.2.3 priority:范围-128~127。高优先级的resource能接受发送到bare JID的消息,低优先级的resource不能。优先级为负数的resource不能收到发送到bare JID的消息。

例子:
<presence from="alice@wonderland.lit/pda">
  <show>xa</show>
  <status>down the rabbit hole!</status>
</presence>

5.3 iq (Info / Query)
一种请求/响应机制,从一个实体从发送请求,另外一个实体接受请求,并进行响应。例如,client在stream的上下文中插入一个元素,向Server请求得到自己的好友列表,Server返回一个,里面是请求的结果。
主要的属性是type。包括:
  • Get :获取当前域值。类似于http get方法。
  • Set :设置或替换get查询的值。类似于http put方法。
  • Result :说明成功的响应了先前的查询。类似于http状态码200。
  • Error: 查询和响应中出现的错误。
例子:
<iq from="alice@wonderland.lit/pda" 
    id="rr82a1z7"
    to="alice@wonderland.lit" 
    type="get">
  <query xmlns="jabber:iq:roster"/>
</iq>


备注:

1、单词缩写:

IETF: Internet Engineering Task Force.  

XSF: XMPP Standards Foundation.  

XEP: XMPP Extension Protocols.

URI: Uniform Resource Identifier

TLS: Transport Layer Security

SASL: Simple Authentication and Security Layer

BOSH: Bidirectional-streams Over Synchronous HTTP

2、参考资料

《XMPP协议的原理介绍》

《RFC3920》

《XMPP: The Definitive Guide》


MQTT vs. XMPP,哪一个才是IoT通讯协议的正解 我对MQTT还是非常熟悉的,我用它做过IoT应用,开发过IoT产品。 我对XMPP应该说算是精通了,我写过XMPP基础开发库、XMPP服务器、实现过XMPP的各种标准,并基于XMPP做了了IoT开发平台。 我尝试客观的来评价这两种协议,如果抛开我更擅长XMPP,以及Lithosphere基于XMPP技术开发的主观立场,我如何评价这两种协议呢? 阅读详情

相关推荐

基于单片机控制的开关电源设计

采用开关电源技术和MCU模块,凭借可靠性高、易于调适的特点,可以更高效地发挥出二者的优势,从而实现更好的组合。stm32的起动模式是通过Boot0和Boot1两个管脚的高低电平来决定的,当stm32被供电之后,这两个管脚的电平。在 VCC上,键盘的一头(列线)被连接到 VCC上,而在“0”的编程输出中,则用来进。,在开关管打开的情况下,由输入电力供给电流,感应装置存储   Buck变换器是一种非隔离式的电压转换器[10]整流电路对输入电压进行整流,再经过滤波电路,即Dc电压是直流/直流变换器的直流输入。

QQ1694456187的博客 2308

关于XMPP的简介

初次认识xmpp

qq_27437301的博客 2627

ITIL 4 Foundation 自学通关笔记1

ITIL 4 Foundation 自学通关笔记

m0_58817196的博客 950

XMPP——xmpp协议详解、优点、缺点及优化思路

XMPP(Extensible Messaging and Presence Protocol,前称Jabber)协议介绍 可扩展消息处理现场协议(eXtensible Messaging and Presence Protocol , XMPP) 是一种基于可扩展标记语言(eXtensible Markup Language, XML)的近端串流式即时通信协议。它将现场和上...

weixin_34109408的博客 1198

AI在电商中的搜索优化

自拟标题 《AI技术助力电商搜索优化:深度解析一线大厂面试题及算法编程实践》 概述 随着人工智能技术的不断发展,AI在电商搜索优化中的应用日益广泛。本文将围绕“AI在电商中的搜索优化”这一主题,介绍国内头部一线大厂如阿里巴巴、百度、腾讯、字节跳动等在面试中常见的AI相关面试题和算法编程题,并提供详尽的答案解

AI天才研究院 912

069、自动曝光(AE)测光策略:全局/中心/点测光与曝光时间增益分配

本文深入探讨了自动曝光(AE)测光策略的技术细节与实际应用。作者通过多个真实案例(手机前置摄像头、车载ADAS、安防监控等)分析了全局测光、中心测光和点测光的优缺点,指出不同场景应采用不同策略。重点剖析了曝光时间与增益分配的"跷跷板效应",提出要根据传感器特性选择最优分配方案。文章强调测光策略应动态调整,并给出5条实用建议:结合场景切换测光模式、关注传感器增益拐点、点测光需防抖处理、全局测光不宜迷信、调试要观察亮度直方图。最后指出AE调试需要结合具体硬件特性进行实测优化,没有通用解决方案。

zzfmlxs的博客 100

XMPP基本概念

概述 XMPP是一个开放式的XML协议,设计用于准实时消息和出席信息以及请求-响应服务。 通用的架构 通常采用客户端服务器架构进行实现,其中客户端通过TCP方式使用XMPP访问服务器,服务器之间也采用TCP方式进行通信。 xmpp通用架构 服务器 充当xmpp通信的一个智能抽象层,负责 对受验证的客户端,服务器以及其他实体之间以xml流的形式的连接和会话进行管理。在这

章志强的专栏 1584

LLaMA-Factory微调教程2:命令行sft微调

本文介绍了如何使用llama-factory项目在本地运行Qwen2-7B大语言模型进行对话。首先通过llamafactory-cli env查看环境配置,然后使用git lfs下载Qwen2-7B模型。创建配置文件qwen2_7b_instruct.yaml,修改模型路径和模板参数。最后通过llamafactory-cli chat命令启动对话服务,加载模型配置文件和tokenizer,完成环境初始化后即可进行交互式对话。

Cachel Wood的博客 8814

XMPP协议学习笔记二

IM的实现原理    在我最初学习编程的时候,曾经用JAVA实现了一个最简单版的IM通讯,即通过Socket建立两台电脑之间的连接,然后发送IO流来进行即时通讯,我们现在所使用的IM软件尽管看上去非常复杂,但是基本的原理和以上的差不多,无非是采用服务器客户端的架构,通过登陆到服务器来获取个人资料和好友,然后聊天时直接通过IP和好友进行即时通讯。XMPP协议的网络架构     XMPP是一个典型的C/S架构,而不是像大多数即时通讯软件一样,使用P2P客户端到客户端的架构,也就是说在大多数情况下,当两个客户端

nomousewch的专栏 2万+

【100%通过率】华为OD机试真题 Python 实现【最多组合直角三角形个数】【2023 Q1 | 100分】

有N条线段,长度分别为a[1]-a[n]。 现要求你计算这N条线段最多可以组合成几个直角三角形。 每条线段只能使用一次,每个三角形包含三条线段。

MISAYAONE的博客 1万+

手把手教你学Simulink--基于Simulink的微电网用DC-DC变换器仿真建模

微电网概述微电网:包括可再生能源发电设备、储能系统和负载,可以独立于大电网运行,也可以并网运行。重要性提高能源可靠性:通过本地化供电减少对外部电网的依赖。促进可再生能源利用:支持高效整合多种可再生能源。挑战多源管理:不同类型的能源产生方式各异,需设计灵活的电源管理系统。能量转换效率:需要高效的能量转换装置来确保能源的有效利用。通过上述步骤,我们简要介绍了如何基于Simulink进行微电网中DC-DC变换器的仿真建模。

MHD0815的博客 161

XMPP协议学习笔记一

即时通讯技术简介    即时通讯技术(IM)支持用户在线实时交谈。如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容。大多数常用的即时通讯发送程序都会提供各种各样的功能:即时通讯 - 在用户和在线朋友之间来回发送信息 聊天 - 创建用户与朋友或工友的自定义聊天室 网页链接 - 共享用户喜爱的网址 支持图片 - 浏览朋友计算机中的图片 支持声音 - 给朋友播放音乐 支持文件传输 - 直接将文件发送给朋友,以便于共享 交谈 - 使用 Internet,而不是

nomousewch的专栏 2万+

[STM32F103C8T6]W5500+Modbus TCP(HAL库)

本章节是博主学习Modbus TCP所写的一篇文章Modbus TCP是Modbus的一个分支,主要用到网口通信的,在工业上也用的很频繁,我们公司最近的项目就是用的W5500+modbus TCP来和PC端的上位机通信和交互的。虽然这个项目不是我在写代码,但是我都学了Modbus RTU了,那我也抽空学习一下Modbus TCP吧。本次的Modbus TCP不是博主写的,是一个大佬开源的一个W5500写的一个Mobus TCP代码,我在这个基础上自己写了主机读从机多个数据,和主机写从机寄存器的函数。

sinat_58149788的博客 4086

Android--XMPP协议学习笔记

XMPP协议学习笔记一 即时通讯技术简介     即时通讯技术(IM)支持用户在线实时交谈。如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容。大多数常用的即时通讯发送程序都会提供各种各样的功能: 即时通讯 - 在用户和在线朋友之间来回发送信息聊天 - 创建用户与朋友或工友的自定义聊天室网页链接 - 共享用户喜爱的网址支持图片

Navan 861

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

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

XMPP协议学习笔记

一、定义        XMPP 是一种很类似于http协议的一种数据传输协议,它的过程就如同“解包装--〉包装”的过程,用户只需要明白它接受的类型,并理解它返回的类型,就可以很好的利用xmpp来进行数据通讯。        XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网

imyfriend的专栏 2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java xmpp实例,XMPP协议学习笔记一

即时通讯技术简介即时通讯技术(IM)支持用户在线实时交谈。如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容。大多数常用的即时通讯发送程序都会提供各种各样的功能:即时通讯 - 在用户和在线朋友之间来回发送信息聊天 - 创建用户与朋友或工友的自定义聊天室网页链接 - 共享用户喜爱的网址支持图片 - 浏览朋友计算机中的图片支持声音 - 给朋友播放音...

weixin_28998775的博客 336

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Xmpp client重连机制

目录 1 XMPP存在的意义.... 4 2 带防火墙的XMPP部署.... 4 3 XMPP关系图.... 5 4 XMPP连接请求消息序列.... 6 5 CPE端XMPP Client重连机制.... 6 5.1连流程图... 7 5.2重连时间间隔... 7 5.3部分重连代码... 7 六 参考文档.... 8 1 XMPP存在的意义 随着TR-069可以管理的CPE设备越来越多,然而位于NAT或启用防火墙的网关后面的设备(可能使用网...

Suvine的专栏 2491

XMPP协议学习

XMPP协议简介 XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messaging,即时消息)协议之一,其他三种分别为:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)。 在这四种协议中,XMPP是最

不精通则死 724

XMPP协议学习笔记四(Openfire服务器启动过程)

在上篇文章中我们成功部署了openfire的源码,这一篇我们来初步了解一下openfire的项目结构。 概述     Openfire最主要的功能是实现XMPP服务器,简单来说,openfire为我们提供一个固定的地址,我们只需要向openfire服务器发送标准的XMPP信息(即XML文件流),那么openfire服务器应当给予我们回应,这里的openfire服务器也可以看做一个容器,我们

nomousewch的专栏 1万+

XMPP协议详解

1、XMPP的基本网络结构是怎样? xmpp中定义了三个角色,客户端、服务器和网关;通讯可以在这三者之间的任意两者中进行双向进行。服务器同时承担了客户端的信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。 2、XMPP协议的网络架构: ...

caixiaobai_1的博客 7881

XMPP协议学习笔记三

本文介绍XMPP协议原理及相关信息。   XMPP协议简介   XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messaging,即时消息)协议之一,其他三种分别为:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开

huohu1007的博客 443

XMPP协议学习(1)

XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messaging,即时消息)协议之一,其他三种分别为:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)。      在这四种协议中,XMPP是最灵活的。XM

DoYou?'s csdn 2219

xmpp协议学习笔记

即时通讯技术简介     即时通讯技术(IM)支持用户在线实时交谈。如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容。大多数常用的即时通讯发送程序都会提供各种各样的功能: 即时通讯 - 在用户和在线朋友之间来回发送信息 聊天 - 创建用户与朋友或工友的自定义聊天室 网页链接 - 共享用户喜爱的网址 支持图片 - 浏览朋友计算机中的图片

qjbagu的专栏 895
上一篇: 数据库连接池的配置(mysql+sql2000+sql2008+sybaase)
下一篇: Java间隔计时触发器
爱上python的猴子
博客等级 码龄12年 401粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值