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

2023-05-16

http://blog.csdn.net/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协议。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Openfire MultiUserChat 多用户聊天 ---创建聊天室 的相关文章

  • 为什么magento的rewrite方法对抽象类无效

    magento中 xff0c 是没法通过Mage getModel 34 xx xx 34 配合xml中的 lt rewrite gt 实现abstruct class的rewrite 为什么 xff1f 这需要详细了解一下magento中
  • magento中在.htaccess设置website code

    在 htaccess中 xff0c 添加以下的内容 xff1a SetEnvIf Host www newjueqi com MAGE RUN CODE 61 newjueqi SetEnvIf Host www newjueqi com
  • apache两种工作模式详解

    http blog chinaunix net space php uid 61 20541969 amp do 61 blog amp id 61 351485 刚接触这两个配置时很迷糊 xff0c 全部开启或全部注释没有几多变化 今天搜
  • Apache处理http请求的生命周期

    Apache请求处理循环详解 Apache请求处理循环的11个阶段都做了哪些事情呢 xff1f 1 Post Read Request阶段 在正常请求处理流程中 xff0c 这是模块可以插入钩子的第一个阶段 对于那些想很早进入处理请求的模块
  • 提高MySQL插入记录的速度

    http hi baidu com jackbillow blog item 65ea47248f645521d50742e7 html 在myisam engine下 1 尽量使用insert into table name values
  • 最常用的http状态码

    200 OK 找到了该资源 xff0c 并且一切正常 202 Accepted 服务器已接受请求 xff0c 但尚未处理 amp bsp 301 Moved Permanently 被请求的资源已永久移动到新位置 302 Found 请求的
  • shell中通过ftp批量上传文件

    为了在shell中上传文件 xff0c 需要避免在控制台中通过交互的方式输入ftp的登录密码 xff0c 这时要安装一个强大的ftp命令行工具 xff1a lftp xff0c 通过lftp登录ftp服务器的格式如下 xff1a lftp
  • 你可能不了解的strtotime函数

    出处 xff1a http www phppan com 2011 06 php strtotime 作者 xff1a 胖胖 在前面的文章中 xff0c 我们提到strtotime函数在使用strtotime 1 month 求上一个月的今
  • PHP的词法解析器:re2c

    出处 xff1a http www phppan com 2011 09 php lexical re2c 作者 xff1a 胖胖 re2c是一个扫描器制作工具 xff0c 可以创建非常快速灵活的扫描器 它可以产生高效代码 xff0c 基于
  • 由浅入深探究mysql索引结构原理、性能分析与优化

    出处 xff1a http www phpben com post 61 74 摘要 xff1a 第一部分 xff1a 基础知识 第二部分 xff1a MYISAM 和 INNODB 索引结构 1 简单介绍 B tree B 43 tree
  • php的strtotime函数源码分析

    最近想实现一个多语言版的strtotime函数 xff0c 所以阅读了php源码中strtotime函数的实现 xff0c 很感谢 胖胖 大大的文章 xff08 http www phppan com 2011 06 php strtoti
  • 新浪微博,腾讯微博mysql数据库主表猜想

    出处 http blog csdn net cleanfield article details 6339428 注意 xff0c 原文下面的评论也是难得的学习资料 xff0c 千万不能错过 用户信息表 xff08 t user info
  • linux shell 常见的时间戳操作

    获取当前的时间戳 span class hljs keyword date span 43 span class hljs variable s span 获取某个时间点的时间戳 span class hljs keyword date s
  • Mantis: SVN integration in 1.2.x

    http blog crazytje be mantis svn integration in the 1 2 x Recently I upgrade my mantis version from 1 1 8 to 1 2 6 first
  • Mantis SVN Integration : Adding extra info to the Note

    http blog crazytje be mantis svn integration adding extra info to the note In my previous post I talked about Mantis and
  • 一次向svn中增加所有新增文件 svn add all new files

    http wp4d sinaapp com 2012 02 19 E4 B8 80 E6 AC A1 E5 90 91svn E4 B8 AD E5 A2 9E E5 8A A0 E6 89 80 E6 9C 89 E6 96 B0 E5
  • codeigniter 对数据库的常用操作

    http www thenbsp com view codeigniter database codeigniter CI 是一个优秀 敏捷的PHP开源框架 xff0c 尤其封装了对数据库的操作 xff0c 很方便 xff0c 以下是php
  • mantis整合svn续:把提交的所有信息自动保存为note

    在前面两篇转载的文章中 xff0c 介绍了mantis和svn的整合 http blog csdn net newjueqi article details 7785373 http blog csdn net newjueqi artic
  • IM:手机客户端和服务端通信的资料

    Android平台下基于XMPP的IM研究 一 http blog csdn net liuhongwei123888 article details 6340757 Android平台下基于XMPP的IM研究 二 MultiUserCha
  • 像素和分辨率的关系

    像素 xff1a 每张图片都是由很多个色点组成 xff0c 每个色点称之为像素 xff08 Pixel xff09 分辨率 xff1a 是指单位长度中所表达或者截取的项目数 我们通常所说的摄像机的分辨率指的是图像分辨率 xff0c 表示每英

随机推荐