XMPP协议设计中引入了一个抽象的资源绑定过程,何为资源,如何绑定?

首先这得从JID的格式设计说起,JID是XMPP前身Jabber协议ID的简写,用于唯一标识一个客户身份。一个合法的 JID 包括一组排列好的元素,包括域名(domain identifier),节点名(node identifier),和资源名(resource identifier),如下:

jid = [ node "@" ] domain [ "/" resource ] ,所有 JID 都是基于上述的结构,类似 <user@host/resource> 这种结构。
node:是对用户的抽象,既可以代表一个真实的用户,也能表示一个虚拟用户如一个聊天室等。
domain:表达了客户所连接的服务器,在实践中通常表示一个特定的集群,由同一domain来表示。
resource:它通常表示一个特定的会话,连接。对于服务器和和其他客户端来说,资源名是不透明的。

资源名的获得需要经历一个资源绑定的过程,这个过程按照XMPP协议约定是在SASL握手完成后,由客户端重新发起初始化流请求后。

服务器向客户端声明资源绑定特性,过程如下:

<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='c2s_345' from='example.com' version='1.0'><stream:features><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/></stream:features>

客户端发起资源绑定请求,并指定一个绑定的资源名

<iq type='set' id='bind_2'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><resource>pc-win-someone</resource></bind>
</iq>

服务端响应资源绑定请求,并返回绑定后的Full JID名

<iq type='result' id='bind_2'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><jid>somenode@example.com/pc-win-someone-server-gen-random-string</jid></bind>
</iq>

以上过程即完成了资源绑定,那么资源绑定有什么作用呢,注意查看协议xml中客户端端请求绑定资源名为pc-win-someone,通常实现中可考虑用客户端的平台相关标识,例如 pc-win标示pc下的windows平台等,标识连接客户端的平台和自身名称,但XMPP协议约定resource由服务端按照每客户端生成随机值,用于唯一标识一个客户端一次连接会话。因此服务端的实现在客户端请求资源名后添加了随机生成的唯一后缀,用于区分不同的客户端连接。

那么如此设计的目的何在?

主要考虑方便同账号用户的多点登陆(手机、pad、pc端等多点同时在线),通过resource区分同一用户的不同接入点,由node+domain+resource组成唯一的用户在线标识。

通过用户ID形成一对多的用户接入映射,方便获得同一账号的多个接入信息,可灵活的设计多点登陆时用户的自选策略(是否踢下其他登陆、或选择最近登陆接收消息等)。

转载于:https://www.cnblogs.com/hehe520/archive/2012/03/24/6147664.html

IM设计思考:XMPP资源绑定相关推荐

  1. 踏莎行·术 - IM设计思考:XMPP资源绑定

    XMPP协议设计中引入了一个抽象的资源绑定过程,何为资源,如何绑定? 首先这得从JID的格式设计说起,JID是XMPP前身Jabber协议ID的简写,用于唯一标识一个客户身份.一个合法的 JID 包括 ...

  2. 面试必备:一个秒杀系统的设计思考

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:阿哲 segmentfault.com/a/11900000 ...

  3. 微服务的接入层设计与动静资源隔离

    作者:刘超,毕业于上海交通大学,15年云计算领域研发及架构经验,先后在EMC,CCTV证券资讯频道,HP,华为,网易从事云计算和大数据架构工作.在工作中积累了大量运营商系统,互联网金融系统,电商系统等 ...

  4. 一个秒杀系统的设计思考

    简介:从架构视角来看,秒杀系统本质是一个高性能.高一致.高可用的三高系统.而打造并维护一个超大流量的秒杀系统需要进行哪些关注,就是本文讨论的话题. 秒杀大家都不陌生.自2011年首次出现以来,无论是双 ...

  5. 【忘川风华录】雅社——公会社交系统交互设计思考

    GameTube邀请忘川交互团队分享设计中的经验和感受.本次为<忘川风华录>交互设计师[丸子]分享公会系统的设计思考.此篇为忘川设计复盘系列完结篇~ 期待之后会有更多交互同学分享设计的经历 ...

  6. RESTful API 设计思考

    RESTful API 设计思考,内容来源网络加自己的思考 1.RESTful Web API采用面向资源的架构:同一的接口,所以其成员体现为针对同一资源的操作 2.SOAP Web API采用RPC ...

  7. 经验:一个秒杀系统的设计思考

    点击上方「蓝字」关注我们 前言 秒杀大家都不陌生.自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见.简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的 ...

  8. API 快速开发平台设计思考

    作者 | 人月聊IT 来源 | toutiao.com/i6914469326074479108 在我之前谈API网关的时候曾经谈到过快速开发平台,即将API快速开发的一些内容放入到API网关中,实际 ...

  9. 一个秒杀系统的设计思考(整体思考,收藏了)

    作者:阿哲 来源:https://segmentfault.com/a/1190000020970562 前言 秒杀大家都不陌生.自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀 ...

  10. Risc-V单周期CPU设计思考

    Risc-V单周期CPU设计思考 今年学校课程改革,计算机组成课开始教学Risc-V,写单周期CPU的时候发现网上好像大多都是MIPS的CPU设计,所以就把自己关于设计Verilog的一些思路整理出来 ...

最新文章

  1. map和pair的配合使用
  2. 长能耐了?想造反了?你老婆没了.......
  3. 【Leetcode | 12】342. 4的幂
  4. asterisk版本选择
  5. 【JMeter】Thread Group下的组件Sampler取样器
  6. namespace关键字-1
  7. ESP8266 wifi 模块配置,Wechat+APP控制实现
  8. [POI2007]ODW-Weights(贪心)
  9. 当你发现自己U盘里文件夹有了“.exe”后缀该怎么办
  10. CSS从入门到精通——基础知识
  11. 北京小微企业个税社保申报方式
  12. CMSIS到底是个什么东西
  13. 磁共振成像原理-物理基础(质子在外部磁场的情况)
  14. 怎么把解压的文件在HTML打开,压缩文件怎么解压打开?
  15. 论文笔记 · Symmetry and Group in Attribute-Object Compositions(CVPR 2020)
  16. java mars2_Mars-java 2.2.2 发布,不需要容器的 Java Web 开发框架
  17. Windows 10 数据恢复与预防数据丢失指南
  18. dbpedia知识图谱java_一种基于DBpedia的水务领域概念知识图谱构建方法与流程
  19. 12、ABPZero系列教程之拼多多卖家工具 拼团提醒功能登录拼多多实现
  20. file创建文件失败的问题

热门文章

  1. 使用append()方法,原先的js不起作用
  2. spring配置文件中导入约束的详细步骤
  3. 使用 IntelliJ IDEA打包Spark应用程序
  4. 关于提高数据库查询效率的问题
  5. 初尝Spring Cloud Config
  6. 六自由度机械臂项目学习笔记
  7. SunnyOS准备4
  8. linux的环境变量相关的小记
  9. 【English】十六、时间相关
  10. 校园网打开IEEE 显示未登录