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

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


XMPP定义的一些基本概念:

房间:房间的JID标识 <room@service> (例如, <[email protected]>), 这里 "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多用户文本聊天协议的完整用例集合,请参考协议规范。

你可能感兴趣的:(IM设计思考:XMPP多用户文本聊天协议(MUC:Multi User Chat))