Asmack开发系列之XMPP基础

android xmpp开发 asmack实现断线自动重连 asmack本身封装了断线重连机制,但是有一点需要注意 在设置链接属性钱,要加载ReconnectionManager这个类,否则没有效果。 直接上代码: 第一步 try { Class.forName("org.jivesoftware.smack.ReconnectionManager"); } catch (Exception e1) { } 阅读详情

今天,我们来说一下XMPP协议本身的一些东西。毕竟Asmack只是该协议的一个实现版本。所以,我们又必要了解XMPP协议本身。

1,架构

什么是架构,架构就是一系列实体如何组织、联系和交换信息。例如万维网,由成千上万的服务器,他们运行着Apache或者是新的Nginx,客户端由web浏览器,如IE,firefox和Chrome。他们之间交换的数据是HTML,他们之间交换数据的协议是HTTP。

类似的,对于即时通信,也有自己的架构。它的服务器端一般跑着像Openfire和ejabberd这样服务器软件,客户端一般有像Adium,Gajim,Pidgin等。XMPP是协议,但为了描述方便,我也会那它当做是我们整个这类软件,架构的代名词。xmpp是decentralized client-server architecture,去中心化的客户端-服务器架构。怎么理解?就是它有服务器,不是纯种的peer-to-peer那种架构,这样管理方便,更可靠。但它的服务器不是一个,不是单点,而是散耦合的,这样就鲁棒。这也就得支持服务器到服务器的通信。


但是,xmpp和www是有区别的,万维网的服务器是不会为你转发信息的,它很少支持域间通信。这么说吧,加入你访问的了迅雷的一个网页,但是这个网页有一个URL图片是指向优酷的,这个时候你的Chrome访问迅雷后,还得它自己去访问优酷来下载这个图片,迅雷是不会为你下的然后传给你。万维网的示意如下:


在服务器传递消息这方面,我们需要再说一下邮件系统,如下图所示。邮件系统是多步转发的。假如你用QQ邮箱给我的工作邮箱zengjinlong@xunlei.com发送一个邮件,首先你的邮箱客户端会把你的邮件上传到QQ邮箱,QQ邮箱就检索,看是不是能够直接投递给迅雷邮箱服务器,假如哈,假如没检索到,于是腾讯就把邮件转给了它觉得应该正确的下一步,比如说百度,百度邮箱收到之后一看,迅雷的邮件,有,于是直接转给迅雷邮箱服务器。迅雷邮箱服务器收到之后帮你存储,然后当你要的时候就推送给你。


xmpp呢,支持域间(服务器之间)通信,但是没有邮件系统那么复杂,它只支持单步转发。就好比刚才的邮件,如果腾讯没有找到迅雷,他就不会说再投给百度试一下,不会的。它会选择回复你一个不可达或者直接抛弃。如下图所示


总结一下万维网,邮件系统,xmpp系统的区别


2,地址

因为xmpp是一个网络协议,包含客户端和服务器,需要在网络上传输数据。所以,他们需要一个地址。xmpp并不是直接建立在IP上,它依赖DNS(domain Name System)(事实上其实没有域名也是可以的,至少我的系统没有域名,但是你需要指定host(IP)和一个假定的域名(虚拟的,随便填,但你要记得他))。xmpp的账号都是这样子的eg:micall@xunlei.com,后面跟的是完整的域名。这个和传统IM不太一样。对了,这个唯一标示用户的叫做JabberID(JID)。

一个JID包含三部分内容:

1)用户名。

2)域名。

3)资源(Resources)。资源是xmpp支持一个账号多终端登入的必要条件。还是这个账号micall@xunlei.com,加入你在PC上登入,那么一个完整的用户名就是micall@xunlei/PC,加入你在你的android手机登入,micall@xunlei.com/android,你在你的ipad登入,那么micall@xunlei/ipad。等等,这样的机制是为了支持多终端登入,而且可以设定他们接收数据的优先级。

3,XML流

XMPP,本质上就是一种传输XML流的技术。和HTTP不一样,HTTP是每次请求完之后,连接就断开,然后要新开连接,HTTP的一些其他技术都导致它不够实时。不能够满足一些例如即时通信的场合。xmpp不一样,你可以发送多个请求,它也不会阻塞住,xmpp需要注意的是你需要用异步的思维来考虑事情。后续章节会知道。在这里我给大家贴一个xml会话。

C: <stream:stream>
C: <presence/>
C: <iq type="get">
<query xmlns="jabber:iq:roster"/>
</iq>
S: <iq type="result">
<query xmlns="jabber:iq:roster">
<item jid="alice@wonderland.lit"/>
<item jid="madhatter@wonderland.lit"/>
<item jid="whiterabbit@wonderland.lit"/>
</query>
</iq>
C: <message from="queen@wonderland.lit" 
to="madhatter@wonderland.lit">
<body>Off with his head!</body>
</message>
S: <message from="king@wonderland.lit"
to="party@conference.wonderland.lit">
<body>You are all pardoned.</body>
</message>
C: <presence type="unavailable"/>
C: </stream:stream>

4,通信洪流(Communication Primitives)

对于这个标题,我暂且这么翻译吧,请不要吐槽,如果你有更好的名字,请留言,我将不客气的更新这个名字。在xmpp中还有个字眼“stanzas"是非常常见的,翻译为”局“?”节“?。我把它翻译为”节“。它是个什么概念呢,其实,你可以理解为packet。就是一次传输的数据包。

节的意义需要从以下几个方面来确定:

(1)节元素的名称,例如message,presence,iq等。这几个不同的节,服务器对它的处理时不一样的,客户端对他们的处理也是不一样的。

(2)Type属性。

(3)子节点。

下一节,我们详细说明有哪些节以及他们的处理。












即时通讯:XMPP基础 XMPP(Extensible Messaging and Presence Protocol)是一种基于标准通用标记语言的子集XML 的协议,它继承了在XML 环境中灵活的发展性。因此,基于XMPP 的应用具有超强的可扩展性。经过扩展以后的XMPP 可以通过发送扩展的信息来处理用户的需求,以及在XMPP 的顶端建立如内容发布系统和基于地址的服务等应用程序。 阅读详情

相关推荐

Android即时通讯开发实战:使用asmack库

本文还有配套的精品资源,点击获取 简介:asmack-master.zip包含asmack库源代码,是专为Android平台即时通讯开发设计的库,特别是基于XMPP协议的应用。XMPP是一种开放标准的即时通讯协议,支持实时通信和数据交换。asmack库提供了一系列与XMPP服务器交互的API,简化了IM应用的实现,并涵盖了连接管理、会话管理、消息处理等关键功能。开发者通过集...

weixin_42601608的博客 857

XMPP协议学习笔记

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

imyfriend的专栏 2万+

【解决方案】使用transformer指定显卡后,模型依然加载到默认第1张显卡上

按理说指定了环境变量为后面几张显卡,模型会自动加载到我们指定的显卡上。可是查看gpu使用情况,发现还是加载在了第一张显卡上,这是为啥呢?

m0_56745306的博客 2441

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

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

weixin_33859504的博客 373

多仓智能订单路由与动态优化方案设计

现在有很多商家会有多个仓库,并分布在不同的城市中,当用户下单后会根据商品库存及订单信息将订单分配到对应的仓库进行发货,如就近原则,本期基于多仓库设计一套订单路由方案,包含核心逻辑、规则优先级和实施方案,适用于多仓协同的订单自动分配场景

14年产品经理老兵,想把自己的经验及总结分享给大家,只讲思路及实操,不讲废话 2481

2024最新超详细无痛安装PyTorch,包括下载地址、环境配置与各种避坑指南

PyTorch更新很快,2024最新下载安装经验贴,包括anaconda+CUDA+cuDNN+PyTorch四部分的下载和安装。文章详细介绍了下载地址、环境配置、虚拟环境建立的问题,还温馨提示了各种闭坑指南。有需要的友友快过来康康!

qq_43596278的博客 11万+

xmpp协议(即时通信协议规范)

转载自https://www.cnblogs.com/jiyuqi/p/5085932.html 相关背景 IM(Instant Messaging)正在被广泛使用,特别是公司与它们的客户互动连接方案以及互联网与Web2.0相关的应用。为了解决即时通信的标准问题,IETF(互联网工程任务组 The Internet Engineering Task Force)成立了专门的小组、研究和开发I...

xiaoliuliu2050的专栏 1万+

戴尔笔记本装Ubuntu 20.04,别急着分区!先搞定这个BIOS设置(Intel RST避坑指南)

本文详细介绍了在戴尔笔记本上安装Ubuntu 20.04时遇到的Intel RST技术兼容性问题及解决方案。通过安全切换至AHCI模式,避免安装过程中找不到硬盘的常见问题,并提供双系统分区策略和安装后的优化建议,确保Ubuntu与Windows 10双系统稳定运行。

weixin_31315567的博客 272

xmpp协议相关资料

xmpp协议详解一:xmpp基本概念 XMPP协议详解二:XMPP出席 XMPP协议详解三:即时消息 XMPP协议分析—具体篇

一名普通码农的菜地 1431

Python使用netmiko配置华为交换机

1.netmiko就是专门为网络设备做的模块,非常强大。1.更适合网络设备的自动化运维模块。2、批量配置变更、备份。1.安装netmiko。2. 创建SSH连接。一、netmiko介绍。

博然的宝藏库 2797

GSview5.0安装步骤及问题

GSview5.0安装步骤及问题安装步骤遇到的问题 尝试过很多对图片去白边的方法,感觉最好用最有效的还是用GSview比较好操作。本文针对gsview安装及安装过程中踩过的坑记录下来。 安装步骤 在官网下载gsv50w64.exe(或32位的),直接双击安装即可。 安装Ghostscript;注意:GSview5.0不支持最新版的Ghostscript9.54,这里用到是9.27的版本可以在Github中找到,下载gs927w64.exe,一定要安装在GSview的安装目录Ghostgum下 Gho

LilianLYN的博客 1万+

Openfire修改Domain域值

Openfire修改Domain域值作者:chszs,版权所有,未经同意,不得转载。博主主页:http://blog.youkuaiyun.com/chszs与Tigase不同,Openfire安装后,它的配置属性不是写入XML文件中,而是基本上都存到数据库表里。 配置属性所在的数据表为ofProperty表mysql> select * from ofProperty; +------------------

chszs的专栏 7642

SAP ABAP 接口管理服务(ZIF)开源项目介绍

接口管理服务(ZIF)开源项目基于 SAP ABAP系统,是一款对标SAP PI/PO 的轻量接口管理产品。他通过独立开发包部署在ABAP系统中,包含接口注册、接口管理、日志服务及其他配套功能,拥有丰富的技术沉淀并通过市场检验,目前已被多家企业应用在SAP ERP系统中。

SAP李斌,本人承诺所有原创文章均不使用任何AI生成技术,请大家放心阅读。 1742

Asmack开发系列之XMPP概述

这一节,我们从Asmack基于的协议核心出发,XMPP协议,来学习。弄懂XMPP对学习Asmack源码有着重要的原因,做到知其然知其所以然。 本文主要是学习《XMPP The Definitive Guide Building Real-Time Applications with Jabber Technologies》文总结而来。 1,您能够拿XMPP来做什么? XMPP(Ext

MiniMicall的专栏 1267

【应用】打造你的安全本地AI购物助手:OpenClaw + 淘宝MCP部署全攻略

本文介绍了在Ubuntu虚拟机中配置OpenClaw连接Windows宿主机的淘宝MCP服务的两种方案。核心原理是通过修改MCP服务监听地址或SSH隧道转发,实现跨网络访问。方案1推荐修改MCP服务绑定0.0.0.0并配置防火墙放行端口,适合长期使用;方案2通过SSH隧道转发,适合临时测试。文章详细说明了环境准备、配置文件修改及两种互通方案的具体实施步骤,重点解决了虚拟机与宿主机网络互通的关键问题。

海兰 1324

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

关于XMPP协议android客户端和openfire的连接问题

今晚写了一个关于XMPP协议的即时通信客户端,结果遇到了一箩筐的问题,首先是手贱升级了ADT到17版本,结果发现导入的asmack.jar竟然出现这样奇葩的问题, 02-05 21:50:09.648: E/dalvikvm(19473): Could not find class 'org.jivesoftware.smack.ConnectionConfiguration', referen

lijie815917的专栏 919

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

基于XMPP协议Android即时通讯开源应用

出处:http://www.open-open.com/lib/view/open1387327663015.html基础架构:http://blog.youkuaiyun.com/lnb333666/article/details/7471292 基于xmpp协议的即时通讯,于是乎,为了简单方便,我便把之前百度推聊换了一个芯:将基于百度云推送改成基于asmack的即时通讯,当然,界面也...

weixin_34242819的博客 82

Camera2Demo

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android jpct ae教程,jPCT-AE - Android开源项目 - 组件类库 - JAVA开源项目 - 开源吧

相关开源项目Android平台的XMPP开发包 asmack: asmack 是smack 在 Android 平台上的开发包和补丁程序。Smack是一个开源,易于使用的XMPP(jabber)客户端类库。Open GPS Tracker: GPSTracker是一个能够使用Android地图记录你的驾车或旅行路线的项目,出发前打开软件选择开始记录,你所经过的路线就会实时显示在地图上,同时还会显示...

weixin_42408865的博客 318

aSmack调试秘籍:如何快速定位Android XMPP开发难题

aSmack作为Android平台上的XMPP客户端库构建环境,为开发者提供了便捷的即时通讯解决方案。本文将分享一套实用的调试秘籍,帮助开发者快速定位并解决Android XMPP开发过程中遇到的各种难题,提升开发效率。 ## 启用aSmack调试模式的简易方法 在aSmack开发中,启用调试模式是排查问题的第一步。通过分析项目代码可知,aSmack提供了专门的调试类来支持这一功能。 查看[

gitblog_00495的博客 386

从Json.NET到System.Text.Json:迁移避坑指南+共存方案(附对比清单)

**Json.NET**(Newtonsoft.Json)是 .NET 生态中使用最广的高性能 JSON 序列化框架,而 .NET 5+ 官方内置的 **System.Text.Json** 正在成为新的默认选择。本文面向新手开发者,用最通俗的方式讲清:从 **Json.NET 迁移到 System.Text.Json** 时最容易踩的 7 个坑、两套 JSON 库如何优雅**共存**,以及一份可

gitblog_01181的博客 483

aSmack贡献指南:如何参与XMPP客户端库的开发

aSmack是一个为Android平台构建的XMPP客户端库开发环境,旨在帮助开发者轻松构建功能强大的即时通讯应用。本指南将为你提供完整的贡献流程,从环境搭建到代码提交,助你快速参与到这个开源项目中。 ## 一、准备开发环境 🛠️ ### 1.1 克隆代码仓库 首先需要将项目代码克隆到本地: ```bash git clone https://gitcode.com/gh_mirrors/a

gitblog_00697的博客 458

android asmack和xmpp的关系,XMPP协议和asmack

更多干货一,什么是XMPPXMPP(Extensible Messaging and Presence Protocol),可扩展消息与存储协议,是目前主流的IM协议之一,它是一种基于XML传输的协议,咱们都知道XML的可扩展性比较强,XMPP使用XML进行传输,使得咱们可使用XMPP发送扩展的消息来知足咱们更多的需求。XMPP包含两部分的定义:一是核心的XML流传输协议,此定义使得XMPP可以在...

weixin_39685674的博客 270

基于xmpp实现android端实现即时通讯---asmack基本方法(三)

简单介绍一下asmack中常用到的方法属性 connection.getAccountManager().createAccount(username, password);  //创建一个用户        roster.removeEntry(roster.getEntry(friendName)); //删除某个好友        roster.setSubscriptionMod

mozhenhau的IT编程学习 9545

aSmack构建教程:从源码到JAR的快速上手指南

想要在Android应用中集成即时通讯功能吗?🤔 aSmack构建环境为您提供了一个完整的解决方案!本文将为您详细介绍如何从源码快速构建aSmack库,让您的Android应用轻松获得XMPP协议支持。aSmack是一个专门为Android平台优化的Smack XMPP客户端库构建环境,虽然项目目前已废弃,但对于需要定制化构建的开发者来说,掌握其构建流程仍然非常有价值。 ## 📋 环境准备与

gitblog_00881的博客 1099

XMPP-Android基于openfire+asmack

一、搭建openfire mysql下载地址:http://pan.baidu.com/s/1qY2a6BU openfire下载地址:http://download.youkuaiyun.com/detail/xsz_1025/9672665 1、安装配置mysql 如果下载的mysql是.exe格式,则无脑安装,以下着重介绍解压版mysql的配置 将压缩包解压到想要安装的位置配置环境

xsz_1025的博客 803

android asmack基于xmpp的即时通讯应用

xmpp是一个通信协议。因为这是个开放的协议,为了节俭开发成本,很多即时应用都采用了这个协议。Android上最常用的组合asmack +openfire。Asmack是smack的android版,是对xmpp协议进行了封装,并提供了丰富的api,简化了操作。Openfire是一个开源的IM服务器,基于Xmpp实现。换句话说使用xmpp开发即时通讯应用的话,服务器端已经开发好了,就是openfi

383
上一篇: Asmack开发系列之xmlPullParser
下一篇: 多线程对信号的接受处理
minimicall
博客等级 码龄18年 407粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值