今年开始到5月都在学习和使用openfire进行公司新的项目开发,这里正好整理一下学习笔记。
openfire是什么?
Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。
安装openfire,这个网络上面教程很多,安装也很方便,只要有jre环境就ok,就不多做说明了。
openfire采用xmpp协议,底层怎么交互可以不用研究,反正就是按xml的协议进行消息的交互。xml的好处就是扩展性强,缺点应该就是冗余
公司用的java开发,这里就涉及到openfire提供的api包,在java是smack,这是一个封装了很多消息,事件的包,使开发openfire变的相当快速。
再讲解一些openfire中的一些基本概念:
(1) 名(domain identifier);openfire服务器的名称
(2) 点(node identifier);用户的名称
(3) 源(resource identifier).资源,可以理解为可以通过多种软件连接openfire,那个软件的标示
3个基础包
Presence:出席包,用来告知服务器是上线还是下线等状态信息
用枚举类型Presence.Type的值表示: available -- (默认)用户空闲状态 unavailable -- 用户没空看消息 subscribe -- 请求订阅别人,即请求加对方为好友 subscribed -- 统一被别人订阅,也就是确认被对方加为好友 unsubscribe -- 他取消订阅别人,请求删除某好友 unsubscribed -- 拒绝被别人订阅,即拒绝对放的添加请求 error -- 当前状态packet有错误 内嵌两个枚举类型:Presence.Mode和Presence.Type. 可以使用setStatus自定义用户当前的状态(像QQ一样的)U:<presence from='alice@example.com/work'to='support@workgroup.example.com'>U:</presence>
Message:消息包
Message.Type:
chat:聊天
groupchat:群聊
headline:在线消息(对方如果不在线不会保存)
< message to= ‘lily@jabber.org/contact’ type =’chat’ > < body > 你好,在忙吗< /body > < /message >
IQ
一种请求/响应机制,从一个实体从发送请求,另外一个实体接受请求,并进行响应.例如,client在stream的上下文中插入一个元素,向Server请求得到自己的好友列表,Server返回一个,里面是请求的结果. < iq > 主要的属性是type。包括: Get :获取当前域值。 Set :设置或替换get查询的值。 Result :说明成功的响应了先前的查询。 Error: 查询和响应中出现的错误。 结构如下所示: < iq from =‘lily @ jabber.com/contact’id=’1364564666’ Type=’result’>
主要的几个知识点先介绍,因为这些基础的概念网络上面很多就不多介绍了。
接下去会介绍一下自己在项目中用到的:系统提供的插件fastpath,以及整个的协议交互,还有自己开发插件,jsjac这几个部分。