IM设计思考:XMPP多用户文本聊天协议(MUC:Multi User Chat)
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多用户文本聊天协议的完整用例集合,请参考协议规范。