2019独角兽企业重金招聘Python工程师标准>>>

XMPP在其XEP-0045扩展中定义了一个用于多用户文本会议(群聊)的协议,类似于聊天室、QQ群等。由于它作为一个标准协议在定义模型上力求完备,涵盖了现实中的绝大部分IM产品模型,而现实中的IM产品基本都只实现了XMPP定义的模型中的一个子集。


XMPP定义的一些基本概念:

房间:房间的JID标识 <room@service> (例如, <jdev@conference.jabber.org>), 这里 "room" 是房间的名称而 "service" 是多用户聊天服务运行所在的主机名

房客:房客的JID标识<room@service/nick>,nick是房客在房间的昵称

岗位:表达了用户和房间的长期关系。XMPP定义的岗位有:所有者(owner)、管理者(admin)、成员(member)、排斥者(outcast)

角色:表达了用户和房间的临时联系,它只存在与一次访问期间。XMPP定义的角色有:主持人(moderator)、与会者(paticipant)、游客(visitor)

有关岗位、角色及其权限详细描述,参考协议规范描述(角色、岗位和权限)


XMPP MUC协议扩展定义了一个广泛的用例集合,下面提取一些典型的核心场景来简要分析说明并辅助实现。

1. MUC服务发现

主要用于客户端向服务器咨询是否支持MUC,协议交互细节详见:MUC Discovering

2. 新建房间

从房间创建的视角来看,本质上有2种类型的房间:

instant room       临时房间(类似于临时会话),适用于那些临时选取多个用户进行会话的场景

reserverd room  永久房间(类似于固定群)

3. 销毁房间

销毁房间通常仅限于房间的所有者,临时房间通常是在房间所有用户都离开后自动销毁

4. 加入房间

加入房间可以有2种方式,申请和邀请

5. 发言

在房间内发言方式从使用场景的角度看通常有3种:

 - 向房间内所有人发言,发言者发送一个消息类型为groupchat的消息,由房间服务转发给所有与会者。

 - 向部分人发言,这个场景发言者实际创建了一个临时房间,在该临时房间内进行群发。

 - 向某一个人发送似有消息,这个场景退化为了一对一的单独聊天。

6. 退出房间

主动退出、管理员(主持人)踢出房间


关于XMPP多用户文本聊天协议的完整用例集合,请参考协议规范。

转载于:https://my.oschina.net/zhangjie830621/blog/291943

IM设计思考:XMPP多用户文本聊天协议(MUC:Multi User Chat)相关推荐

  1. 踏莎行·术 - IM设计思考:XMPP消息格式

    交换消息是XMPP的一个基本用途并且随之而来的是一个用户生成一个发给另一个实体的消息节. XMPP定义的消息节语法完整格式如下: <messagefrom='juliet@example.com ...

  2. 基于XMPP的IOS聊天客户端程序(XMPP服务器架构)

    最近看了关于XMPP的框架,以文本聊天为例,需要发送的消息为: <message type="chat" from="kang@server.com" t ...

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

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

  4. [iPhone高级] 基于XMPP的IOS聊天客户端程序(XMPP服务器架构)

    最近看了关于XMPP的框架,以文本聊天为例,需要发送的消息为: [html] view plaincopy <message type="chat" from="k ...

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

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

  6. python tcp通信如何实现多人聊天,Python实现多用户全双工聊天(一对一),python多用户,多用户全双工聊天简陋...

    Python实现多用户全双工聊天(一对一),python多用户,多用户全双工聊天简陋 多用户全双工聊天简陋版 简单实现了两个客户端之间的通信,客户端发送消息,先由服务器接收,然后服务器转发到另一客户端 ...

  7. 31号2场直播预告丨下一代分布式数据库设计思考、Greenplum 7新特性和进展

    1.下一代分布式数据库设计思考-03.31 自从 E.F.Codd 于 1970 年提出关系模型,到今天为止,关系数据库已经有 50 多年的发展历史.通过抽象出关系模型和事务模型,以及 SQL 语言, ...

  8. RESTful API 设计思考

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

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

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

最新文章

  1. java数字图像处理开题报告,数字图像处理开题报告.doc
  2. [最近公共祖先(LCA)]
  3. 23.2.3 高速缓存依赖性(1)
  4. 057-while循环
  5. Java构造函数的深入理解
  6. android 拍照屏幕大小,Android Camera 找出屏幕的最佳尺寸大小
  7. esp8266时钟_ESP8266(Non-OS SDK) 驱动 waveshare 2.9 寸墨水屏(二)- 程序移植、修改与测试
  8. 无线Wifi模块AP和STA工作模式详解
  9. 【逆向知识】开发WinDBG扩展DLL
  10. 【宏编程】word统一修改图片样式
  11. PBS 作业调度应用
  12. [BZOJ4621]Tc605
  13. mysql 未发现数据源名称并且未指定默认驱动程序_SQLSERVER 链接 MYSQL 的 两种方法 及 未发现数据源名称并且未指定默认驱动程序 处理办法...
  14. openssl ca文档翻译
  15. Python官方中文文档网址和Python标准库官方中文文档网址
  16. Chrome浏览器无法访问网页(移动硬盘)
  17. 冒险岛开服服务端教程自己搭建服务器需要那些东西
  18. war3鸿蒙大陆攻略,【魔兽rpg地图失落大陆攻略汇总】
  19. 手机邮箱无法显示加密邮件_电子邮件可能无法加密
  20. typora+PicGo-Core+smms上传图床

热门文章

  1. 《实践与思考》系列连载(5)——问答Hprose,以及关于技术与开源的思考
  2. 1、Tensorflow 之 saver与checkpoint
  3. Java高并发程序设计(六)--线程池(1)
  4. POJ 3801/HDU 3157 Crazy Circuits | 有下界的最小流
  5. Android反编译 -- 错误代码还原
  6. ActiveMQ (二) 常用配置简介
  7. php常用函数time
  8. 初探Stage3D(一) 3D渲染基础原理
  9. Camera Calibration and 3D Reconstruction
  10. Javascript如何判断对象是否相等