logo资料库

OpenFire中文版教程 OpenFire深入浅出.pdf

第1页 / 共274页
第2页 / 共274页
第3页 / 共274页
第4页 / 共274页
第5页 / 共274页
第6页 / 共274页
第7页 / 共274页
第8页 / 共274页
资料共274页,剩余部分请下载后查看
前言
XMPP概述
基本网络结构
功能
XML流和XML节
stream属性
基本节点
拓展协议
Mina概述
工作流程
IoService接口
IoFilter接口
IoHandler接口
OF与Mina
OF系统概述
架构概述
源码搭建
OF启动
ServerStarter
XMPPServer
初始化
加载插件模块
启动插件监控管理
通知监听
用户登陆
用户连接
登陆
用户注册
IQRegisterHandler
initialize
handleIQ
注册表单配置
Group
Group通讯
终端查询
控制台上的操作
Group事件
花名册
处理流程
MUC
房间属性设置
创建房间
加入房间
邀请用户
缓存机制
Cache接口
DefaultCache
Cacheable接口
CacheSizes
CacheFactory
连接管理
连接配置
Connection
ConnectionManager
ConnectionManagerImpl
C2S
客户端连接
S2S
控制台的配置
方法流程
S2S建立连接
消息处理
在线chat
消息路由
用户登陆
单点消息
广播
房间消息
离线消息
HttpBind
HttpSessionManager
HttpBindServer
syntax
syntax-request
ScriptSyntax(脚本语法)
介绍
ScriptSyntax
script-response
ChangestotheResponseSyntax
example-5
插件
Plugin管理
Plugin加载器
缓存配置
Plugin接口规范
插件开发
Wildfire
安装
设置概述
SSL指南
背景
JDK1.5的安全工具
LDAPGuide
BroadcastPlugin
用户整合
config
ConnectionManager
安装
属性设置
dns
DNSSetup
CMforwindows
连接管理源码
服务代理
SocketSendingTracker
启动客户端监听
启动SSL监听
启动httpbind监听
消息处理
HTTPService插件
JAVA部分
Web部分
测试
IOS离线推送
源码
Redis插件
介绍
Redis插件
插件流程
插件实现
用户类
预初始化
用户认证
用户名片
用户搜索
消息处理
用户校验
用户数据同步
消息回执
方案一:
方案二
离线消息
集群
HazelcastClusteringPlugin
安装
Hazelcast插件升级
配置
Oraclecoherence
源码分析
负载均衡haproxy
安装
启动
Tsung测试工具
介绍
相关文件安装
Tsung使用
OLE_LINK5
OLE_LINK6
OLE_LINK1
OLE_LINK2
OLE_LINK3
OLE_LINK4
OLE_LINK7
OLE_LINK8
注册用户
登陆用户模拟发送消息
生成报表
windows打包
需要软件
安装
打包
修改build.xml文件
打包
Smack
连接
登陆
获取好友列表
登陆2
单点消息发送
监听好友的出席状态
调试
Spark
Spark的源码构建
Tinder
结束
OpenFire OpenFire 《OpenFire OpenFire 深入浅出》 ——网名:莫然
前言 Openfire 官网 http://www.igniterealtime.org/。 移动互联网让 IM 系统再一次活跃,openfire 为国内很多企业带来了便捷。本人在刚开始使 用 openfire 的时候,也刚到很渺茫。网上关于 openfire 一些相关的资料特别的少。那一个痛 苦啊!不过现在 openfire 已经有越来越多的人来使用和学习了。感谢那些在网上分享文档、 共享的人。 本人做 openfire 已然有段时间了。今天将分享我目前所了解的 OF。之前有写过很多关 于 openfire 学习的片段文档,这几天有时间将之前的散文合并到一起 (当然书中也有小部分 是从网上大牛那得到来的比图 Tsung 这个部分)。结果发现这些零散的学习片段还比较多。 本打算着写一本《OpenFire 深入浅出》的书籍。不过考虑本人资历尚浅,就算发版了,估计 也没几个人能看吧,呵呵。作者使用的 openfire 版本是 3.8.1。目前最新的版本应该是 3.9.3。 版本上有写变化。读者也可以下载最新的版本学习。Ok 了。 故,本书就是一本学习笔记了。当然里面的内容,可能还是有些零散。还望读者谅解。 欢迎大家给我建议。 我的博客:http://blog.csdn.net/huwenfeng_2011 我的邮箱:624308915@qq.com 欢迎大家和我联系! 至此,感谢 2015.02.04
XMPP XMPP XMPP XMPP 概述 XMPP : The Extensible Messaging and Presence Protocol 中文全称:可扩展通讯和表示协议 Xmpp 是一种类似于 http 的通讯传输协议,它是一个“包装”/“解包”的过程。 XMPP 适合新项目的优势: � 无需投入成本制定协议 � 易于扩展 � 可迅速完成原型 � 适合各种容量系统,从100用户在线的系统到100万以上在线用户。 � 可扩展至 Web/Flash IM, Mobile IM 等各种场合,基本都有开源实现或 Library。 � 发展比较成熟稳定 基本网络结构 基本网络结构 基本网络结构 基本网络结构 XMPP 中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间 双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与 异构即时通信系统的互联互通,异构系统可以包括 SMS(短信),MSN,ICQ 等。基本的网 络形式是单客户端通过 TCP/IP 连接到单服务器,然后在之上传输 XML。 功能功能功能功能 传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如 QQ), 要么用纯文本指令加空格加参数加换行符的方式发送(比如 MSN)。而 XMPP 传输的即时 通讯指令的逻辑与以往相仿,只是协议的形式变成了 XML 格式的纯文本。这不但使得解析 容易了,人也容易阅读了,方便了开发和查错。而 XMPP 的核心部分就是一个在网络上分 片段发送 XML 的流协议。这个流协议是 XMPP 的即时通讯指令的传递基础,也是一个非常 重要的可以被进一步利用的网络基础协议。所以可以说,XMPP 用 TCP 传的是 XML 流。 XMLXMLXMLXML 流和流和流和流和 XMLXMLXMLXML 节节节节 XML 流的定义: 一个 XML 流是一个容器,包含了两个实体之间通过网络交换的 XML 元素。一个 XML 流是由一个 XML 打开标签 (包含适当的属性和名字空间声明)开始的,流的结尾则 是一个 XML 关闭标签 。在流的整个生命周期,初始化它的实体可以通过流发送 大量的 XML 元素,用于流的握手(例如 TLS 握手 或 SASL 握手)或 XML 节(在这里指符 合缺省名字空间的元素,包括,, 或 元素)。“初始的流”由初始化 实体(通常是一个客户端或服务器)和接收实体(通常是一个服务器)握手,从接收实体来 看,它就是那个初始实体的"会话"。初始化流允许从初始化实体到接收实体的单向通信;为 了使接收实体能够和初始实体交换信息,接收实体必须发起一个反向的握手(应答流)。
XML 节的定义: 一个 XML 节是一个实体通过 XML 流向另一个实体发送的结构化信息中的一个离散 的语义单位。一个 XML 节直接存在于根元素的下一级,这样可以说是很好的匹配 了[XML]。任何 XML 节都是从一个 XML 流的下一级的某个打开标签(如 )开 始,到相应的关闭标签(如 )。一个 XML 节可以包含子元素(相关的属性、元素、 和 XML 字符数据等) 以表达完整的信息 。在这里定义的 XML 节仅限于,和 元素。 stream stream stream stream 属性属性属性属性 初始化方发给接收 方 接收方发给初始化方 说明 to 接收方的主机名 忽略 from 忽略 发送方的主机名 id 忽略 会话键值 xml:lang 缺省语言 缺省语言 version 支持 XMPP 1.0 支持 XMPP 1.0 该 属 性 仅 出 现 在 初 始 化 实 体 发 给 接 收 实 体 的 XML 流的头当中,并且它的值必须是接收实体所 在的主机名。若 'to' 属性出现在应答流中,则初 始化实体忽略它。 该 属 性 仅 出 现 在 接 收 实 体 发 给 初 始 化 实 体 的 XML 流的头当中,并且它的值必须是为当前初始 化实体授权的接收实体所在的主机名。 该属性仅用于接收实体发送给初始化实体 XML 流的头。这个属性是一个由接收实体创建的具有唯 一性的 ID,一个初始实体和接收实体之间的会话 ID,并且它在接收方的应用程序中必须是唯一的。 注意:这个流 ID 必须是足够安全的,所以它必 须是不可预知的和不可重复的。它不应该在有 'id' 属性出现在初始实体发送给接收实体的 XML 流 的头中;无论如何,如果'id'属性出现在初始化流 中,接收实体应该忽略它。 它包含在初始化实体发给接收实体的 XML 流的 头中,以指定在流中传输的可读 XML 字符所使用 的缺省语言。如果这个属性出现了,接收实体应该 记住它的值,作为初始化流和应答流的缺省属性; 如果这个属性没有出现,接收实体应该用一个可配 置的缺省值用于双方的流,这个属性值必须在应答 流的头中传达。对于所有初始化流中传输的节,如 果初始实体没有提供'xml:lang'属性,接收实体应该 应用缺省值;如果初始实体提供了'xml:lang'属性, 接收实体不能修改或删除它。'xml:lang'属性的值必 须是一个 nmtoken 并且必须遵守 RFC3066规定的 格式。
示例: 基本节点 基本节点 基本节点 基本节点 节点 presence 节点用来控制和表示实体的在线状态,可以展示从离线到在线甚至于离开,不 能打扰等复杂状态,另外,还能被用来建立和结束在线状态的订阅。 away at the ball 其中 show 的取值范围如下: away: 离线 char: 交谈中 dnd: xa: Online: 在线 希望不被打扰 离开一段时间 touring the countryside 10 在这个节中,出现了一个标签,表示现在连接的优先度。 每个连接可以设置 从-128 到 127 的优先读,默认是设置为 0.用户可以在这个标签里修改相应的优先度。如果 有相应的设置的话,用户送往纯 JID 的将会送 到优先度最高的那个连接,如果设置值为负 数的话,则表示送往纯 JID 的消息将永远不会送达该连接。 Message Message <<<>>>节点 message 节点用于用户之间传递消息。这消息可以是单纯的聊天信息,也可以某种格式 化的信息。 message 节点信息是传递之后就被忘记的。当消息被送出之后,发送者是不管 这个消息是 否已经送出或者什么时候被接收到。通过扩展协议,可以改变这样一种状况。 下面我们看一些例子:
Hello ! welcome 单点聊天 错误信息 其中标签取值类型: Chat: Error: groupchat: 多人聊天信息 headline: 通常用在自动服务中,不需要回应。 标签里面是具体的消息内容。 节点 iq 节点主要是用于 Info/Query 模式的消息请求,他和 Http 协议比较相似。可以发出 get 以及 set 请求,就如同 http 中的 GET 以及 POST。iq 节点需要有回应,有 get,set 两种请求以 及 result,error 两种回应。 其中 type 属性取值: Get: 获取当前域值 Set: 设置替换 get 查询的值 Result: 说明成功相应了先前的查询 Error: 查询或相应时候出现了错误 拓展协议 拓展协议 拓展协议 拓展协议
MinaMinaMinaMina 概述 Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一 个 较 新 的 项 目 , 它 为 开 发 高 性 能 和 高 可 用 性 的 网 络 应 用 程 序 提 供 了 非 常 便 利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开
发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。 Apache MINA 也称为: ● NIO 框架库 ● 客户端服务器框架库 ● 一个网络套接字库 MINA 虽然简单但是仍然提供了全功能的网络应用程序框架: ● 为不同的传输类型提供了统一的 API: ○ 通过 Java NIO 提供 TCP/IP 和 UDP/IP 支持 ○ 通过 RXTX 提供串口通讯(RS232) ○ In-VM 管道通讯 ○ 你能实现你自己的 API! ● 过滤器作为一个扩展特性; 类似 Servlet 过滤器 ● 低级和高级的 API: ○ 低级: 使用字节缓存(ByteBuffers) ○ 高级: 使用用户定义的消息对象(objects)和编码(codecs) ● 高度定制化线程模型: ○ 单线程 ○ 一个线程池 ○ 一个以上的线程池(也就是 SEDA) ● 使用 Java 5 SSL 引擎提供沙盒(Out-of-the-box) SSL • TLS • StartTLS 支持 ● 超载保护和传输流量控制 ● 利用模拟对象进行单元测试 ● JMX 管理能力 ● 通过 StreamIoHandler 提供基于流的 I/O 支持 ● 和知名的容器(例如 PicoContainer、Spring)集成 ● 从 Netty 平滑的迁移到 MINA, Netty 是 MINA 的前辈。 总之:它是一个封装底层 IO 操作,提供高级操作 API 的通讯框架! Mina 是底层数据传输和用户应用程序交互的接口 Mina 处于中间层,它不关心底层网络数据如何传输,只负责接收底层数据,过滤并转 换为 Java 对象提供给我们的应用程序,然后把应用程序响应值过滤并转换为底层识别的字 节,提供给底层传输;
分享到:
收藏