Openfire MultiUserChat 多用户聊天 ---创建聊天室

本文详细介绍了用户如何在服务器上发送查询消息创建聊天室,包括消息处理流程、房间创建、配置查询与配置发送等关键步骤。创建后,服务器会返回包含房间状态和创建者角色的通知,并提供配置选项以实现长期使用的房间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/yjl49/article/details/6949267


用户发送查询iq消息后,再发送presence消息创建聊天室:

[html]  view plain copy
  1. <presence id="8Li34-12" to="roomname@conference.myserver/clientA">  
  2.     <x xmlns="http://jabber.org/protocol/muc"></x>  
  3. </presence>  

              处理的时序图如下:


1. 用户发送的presence 消息被路由到ChatService中处理。

2.ChatService中保存有一张本地聊天室中所有用户的视图,如果用户之前已经加入过聊天室,可以从这里快速地查找到相应的信息。

    第一次创建聊天室时是不存在相应的用户的。所以会在这里创建,并加入到视图中。

3.新建MUC用户后就将此消息交由他来处理,每个MUC用户会保持一张自己所在room 和相应角色(role) 的对应关系表,处理消息时先去获取这个角色。初次是NULL。

4. 5.6在ChatService中没有找到已有room的情况下会创建一个,同时试图从数据库中加载之前的配置,并将自己加入到owners中。

7.8.在获取到room后就将自己正式地加入到room中,与刚才不同这里会为user生成相应的role。

9.将自己加入到room后就获取所有已有的参与者的状态。

10.再将自己的状态广播给所有参与者。

11.在未明确规定不需要历史聊天记录的情况下获取历史记录。

12.13 更新room中参与者最后的活动时间。


房间创建完成后服务器返回相应的通知:

[html]  view plain copy
  1. <presence id="8Li34-12" to="clientA@myserver/Spark"  from="roomname@conference.myserver/clientA">  
  2.     <x xmlns="http://jabber.org/protocol/muc#user">  
  3.        <item jid="clientA@myserver/Spark" affiliation="owner" role="moderator"/>  
  4.        <status code="201"/>  
  5.     </x>  
  6. </presence>  

如此只是创建了一个默认配置的初始房间,状态为locked,如果创建者需要一个长期存在的房间就需要进行配置。

首先查询配置所需的参数:

[html]  view plain copy
  1. <iq id="Dfs321-1" to="myroom@conference.myserver" type="get">  
  2.    <query xmlns="http://jabber.org/protocol/muc#owner"></query>  
  3. </iq>  

服务器返回所有所需配置项:

[html]  view plain copy
  1. <iq type="result" id="Dfs321-1" from="myroom@conference.myserver" to="clientA@myserver/Spark">  
  2.   <query xmlns="http://jabber.org/protocol/muc#owner">  
  3.    <x xmlns="jabberx:data" type="from">  
  4.      <titile>Room configuration</titile>  
  5.      <instruction>The room "myroom" has been created.... </instruction>  
  6.      <field var="FROM_TYPE" type="hidden">  
  7.         <value>http://jabber.org/protocol/muc#roomconfig</value>  
  8.      </field>  
  9.      ......  
  10.    </x>  
  11.   </query>  
  12. </iq>  

客户端根据以上配置项发送相应的配置信息到服务器:

[html]  view plain copy
  1. <iq id="feSe-1"  to="myroom@conference.myserver" type="set">  
  2.     <query xmlns="http://jabber.org/protocol/muc#owner">  
  3.       <x xmlns="jabber:x:data" type="submit">  
  4.          <field var="FROM_TYPE" type="hidden>  
  5.             <value>http://jabber.org/protocol/muc#roomconfig</value>  
  6.          ....  
  7.       </x>  
  8.     </query>  
  9. </iq>  
配置完后成服务器会发送相应的result结果,并将房间状态设置为unlock,这样其它人就可以加入房间了。


PS:也可以创建临时房间,具体可参见相应的XMPP协议。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值