文档章节

openfire的配置和逻辑简要

今幕明
 今幕明
发布于 2014/06/21 01:17
字数 1484
阅读 743
收藏 6
点赞 0
评论 0



1.         build path:

a)         source folder:包括openfire和各插件的代码。

b)        libraries:build/lib下jar包和插件下jar包,jdk/lib/tools.jar(编译jsp需要)。

2.         ant build:build/build.xml

a)         openfire(default):构建openfire。

b)        plugins:构建所有插件。

c)        plugin –Dplugin=search:构建插件search。

 

3.         start server:org.jivesoftware.openfire.starter.ServerStarter

a)         VM arguments:根、库、插件目录和调试模式

-DopenfireHome=target/openfire

-Dopenfire.lib.dir=target/openfire/lib

-DpluginDirs=target/openfire/plugins

-DdevelopmentMode=true

b)        classpath:

src/i18n:国际化文本。

src/resources/jar:MIME类型和Console配置文件。

4.         running:

a)         ServerStarter:更新ClassLoader,将lib加进来,实例化唯一的XMPPServer。

b)        XMPPServer:

                         i.              初始化:定位openfireHome,JiveGlobals读取conf/openfire.xml,JiveProperties读取数据库表ofproperty,获取host,设置version,初始化PluginManager,检查数据库。

                       ii.              加载、初始化、启动模块:Model:initialize,start,stop,destroy,getName;其他接口:ServerFeaturesProvider,特性支持;

                      iii.              BasicModule:私有域name,停止时stop和destroy。

1.         boot modules:

a)         RoutingTableImpl:所有消息路由。

b)        AuditManagerImpl:实现AuditManager。

c)        RosterManager:所有花名册管理。

d)        PrivateStorage:所有隐私管理。

2.         core modules:

a)         PresenceManagerImpl:所有状态管理。

b)        SessionManager:所有会话管理。

c)        PacketRouterImpl:转给IQRouter、MessageRouter、PresenceRouter。

d)        MulticastRouter:广播特性,路由带多个地址(addresses)的包。

e)         PacketTransporterImpl:传送包:PacketDelivererImpl:实现PacketDeliver,转移处理;TransportHandler:网关处理。

f)         OfflineMessageStrategy:离线留言策略。OfflineMessageStore:存储离线留言。

g)        VCardManager:用户名片管理。

3.         standard modules:

a)         IQHandler:全部被交给。IQBindHandler:处理绑定资源请求;IQSessionEstablishmentHandler:绑定资源后激活会话;IQAuthHandler:处理登录请求;IQPingHandler:处理ping请求;IQPrivateHandler:处理隐私请求;IQPrivacyHandler:处理私有列表请求;IQRegisterHandler:处理注册请求;IQRosterHandler:处理花名册请求;IQTimeHandler:处理时间请求。IQvCardHandler:处理名片请求;IQVersionHandler:处理版本请求;IQLastActivityHandler:处理最近活动请求;IQOfflineMessagesHandler:处理获取离线留言请求;IQPEPHandler:处理公共订阅请求;IQPEPOwnerHandler;IQSharedGroupHandler:处理共享组请求;AdHocCommandHandler:处理命令请求;IQDiscoInfoHandler;IQDiscoItemsHandler。

b)        PresenceSubscrieHandler:处理状态订阅请求。PresenceUpdateHandler:处理状态请求。

c)        MulticastDNSService:发布服务器信息。

d)        DefaultFileTransferManager:实现FileTransferManager,管理文件传输;FileTransferProxy:

e)         MediaProxyService:多媒体传输协议供jingle使用。

f)         STUNService:点对点支持。

g)        PubSubModule:

h)        UpdateManager:检查服务器和插件升级版本。

i)          FlashCrossDomainHandler:

j)          InternalComponentManager:管理组件。

k)        MultiUserChatManager:管理多人聊天。

l)          ClearspaceManager:

m)      ConnectionManagerImpl:实现ConnectionManager,处理连接请求。

n)        WorkGroupSupport:工作组支持

                     iv.              StatisticsManager,PubSubEngine监听服务启动。

                       v.              PluginManager:监视并加载插件目录下的插件。

5.         serving:

a)         登录:ConnectionManager声明了五种连接:client、client ssl、external component、other server、connection manager,它们有各自的端口并且可禁用。ConnectionManagerImpl创建多个SocketAcceptor监听各个端口,并绑定不同的ConnectionHandler:管理会话,创建各自的NIOConnection和StanzaHandler并将消息交给后者处理,它创建不同的LocalSession。

client
    

client ssl
    

external component
    

connection manager

SocketAccepter
    

SocketAccepter
    

SocketAccepter
    

SocketAccepter

ClientCH
    

ClientCH
    

ComponentCH
    

MultiplexerCH

ClientSH
    

ClientSH
    

ComponentSH
    

MultiplexerSH

LClientS
    

LClientS
    

LComponentS
    

LConnectionMultiplexerS L*S

消息路径:(SocketAccepter)IoSession = > ConnectionHandler => NIOConnection、StanzaHandler => PacketRouter(LocalSession),然后分IQ、Presence、Message分别路由。

b)        IQRouter:RoutingTable、MulticastRouter、SessionManager、UserManager、IQHandler。错误的包交给从SessionManager获得的Session,广播交给MulticastRouter,给其他人的包交给RoutingTable(错误也路由给自己),剩下的交给IQHandler(根据包里的namespace找到唯一的处理者)。

c)        PresenceRouter:RoutingTable(路由)、MulticastRouter(广播)、SessionManager(出错)、PresenceManager(探测)、PresenceUpdateHandler(更新)、PresenceSubscribeHandler(订阅)。

d)        MessageRouter:RoutingTable、MulticastRouter、SessionManager、UserManager(判断注册)、OfflineMessageStrategy(保存留言)。

e)         关键类的理解:

                         i.              ClientConnectionHandler:负责监听IoSession的建立、收发消息和关闭,并且构建Conection和StanzaHandler,收到的消息交给后者,通过前者发送消息。

                       ii.              NIOConnection:保存了表示与用户之间连接的IoSession,通过它发送消息给用户,或者使用PacketDeliver转发消息作为离线留言存储;它通常被Session使用。

                      iii.              ClientStanzaHandler:先建立Session(最终是SessionManager创建并注入Connection),收到的消息交给PacketRouter处理。

                     iv.              LocalClientSession:保存用户信息(IQAuthHandler处理登录),设置用户状态,给用户发送消息,由SessionManager统一管理。

f)         路由功能类:

                         i.              MulticastRouter:广播发送给服务器且有addresses元素的包。

                       ii.              RoutingTableImpl:routePacket转发消息给user、component、server。

                      iii.              IQHandler:处理IQ包。IQAuthHandler处理用户登录,IQBindHandler处理资源绑定,

                     iv.              PresenceUpdateHandler:通过Session设置用户状态。

                       v.              PresenceSubscribeHandler:处理状态订阅包。

g)        管理者类:

                         i.              RosterManager:管理Roster,每个花名册可以广播用户状态给好友。

                       ii.              PrivacyListManager:管理PrivacyList,如果不阻止联系人就发给他状态,使用PrivacyListProvider从数据库加载隐私列表。

                      iii.              UserManager:管理或创建User,更改密码,使用UserProvider从数据库加载用户信息。

                     iv.              PresenceManager:管理用户最后活动状态,用户上下线状态信息。

                       v.              GroupManager:使用GroupProvider管理用户组。

                     vi.              VCardManager:使用VCardProvider管理用户名片。

h)        工厂类:

                         i.              AuthFactory:可配AuthProvider,验证用户登录、获得并加解密用户密码,登录后会告诉UserManager通过UserProvider加载User。

i)          其他类:

                         i.              AdminConsole:获得程序名称和版本,添加删除模块。

逻辑简要:

   

ConnectionManagerImpl作为最后一个模块被加载、初始化和启动,它使用mina-core.jar中的SocketAcceptor、IoSession、IoHandler等处理底层通讯。ClientConnectionHandler是个IoHandler,它监听用户连接请求并用打开的IoSession建立NIOConnection(它调用IoSession发消息给用户)和ClientStanzaHandler,后者通过SessionManager为用户建立LocalClientSession并注入NIOConnection,而从用户收到的Packet则让PacketRouter转发给IQRouter、PresenceRouter和MessageRouter,出错信息可能由Sesssion处理后交给Connection返回给用户,处理成功则让RoutingTableImpl路由给接受者,IQAuthHandler处理用户登录认证的包Authentication然后设置Session的状态为已认证,广播包由MulticastRouter处理,查询包由相应名称空间的IQHandler处理,状态包由PresenceUpdateHandler和PresenceSubscribeHandler处理,消息包一般由RoutingTable的routePacket路由给接收者的Session,如果接收者没有登录则返回给MessageRouter的routingFailed,它调用OfflineMessageStrategy保存为离线消息。

本文转载自:http://blog.csdn.net/hwxia/article/details/6043429

共有 人打赏支持
今幕明
粉丝 46
博文 224
码字总数 39350
作品 0
朝阳
程序员
社交软件服务器配置预算

我想问下大家,大家怎么做服务器配置预算的?我最近在做一个社交软件,使用openfire做服务器,自己深度定制,加了很多业务,弃用原来的cache和mesql服务器,改用redis+mongodb,预计用户数为...

CrazyIllusion
2014/11/30
1K
5
openfire BOSH 内存泄露

在解决openfire BOSH的一个bug中,偶然发现openfire BOSH有内存泄露的情况。 先提供一个jmap命令来跟踪内存泄露: jmap -histo:live $OPID | grep HttpSession $OPID是openfire的进程号。 Ht...

ilxlf
2012/08/31
0
1
Openfire服务端安装和配置

1、服务端程序下载 打开连接:http://www.igniterealtime.org/downloads/index.jsp ,根据你的操作系统以及JRE的环境配置选择相应的版本,本文以:windows 系统下openfire381.zip(不包含JRE...

天衣无缝
2013/08/09
0
0
Openfire 的安装和配置

1、 下载最新的openfire安装文件 官方下载站点:http://www.igniterealtime.org/downloads/index.jsp#openfire 下载地址: Exe:http://www.igniterealtime.org/downloads/download-landing.......

ibm_hoojo
2012/05/17
0
0
openfire 插件开发例子

好久都没有写东西了。今天总结一下之前开发的一些openfire插件。 这次的插件需要提供一个HTTP的接口。通过HTTP来对openfire做一些操作。 插件的目录结构:项目名称“exampleplugin" src/main...

ilxlf
2012/06/02
0
6
XMPP学习笔记-LESSON-001: run on eclipse

之前也一直研究openfire,不过更多的是根据实际情况做些具体修改,以及具体操作,比如用户整合,服务器设置等,闲散的弄了几月,最近考虑系统的学习xmpp。 在学习本章之前,先看了一周的xmp...

今幕明
2014/01/23
0
0
openfire如何整合spring mvc

Openfire的web服务器使用的是jetty,jetty启动的类是AdminConsolePlugin,至于该类是何时调用的就不再赘述。 Openfire整合spring MVC的关键点在于你是在何时初始化DispatcherServlet。如果你...

明舞
2014/12/23
0
10
jvm远程监控配置,以openfire为例,jmx方式监控

我们有时候需要远程的监控jvm,监控jvm有两种方式: 1.jmx #测试能监控cpu和内存,线程 2.jstatd #测试后发现无法监控cpu和内存,线程 由此用jmx来监控,jmx的连接有两种方式rmi和jmxmp 1.以...

jin544642965
2017/07/20
0
0
centos 6.5 搭建openfire

1:安装java环境 yum in stall java* 2:安装mysql 参见http://my.oschina.net/denglz/blog/98434 3:安装openfire 解压 openfire39_3.tar 并移动解压后的目录到/opt目录下 执行/opt/openfire/b......

求学ing
2014/06/28
0
2
iOS开发之mac上搭建openfire服务器

非盈利无广告开发者专用网址导航:www.dev666.com 1、概述 Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。Openfire安装和使用都非常简单,并利用Web进行管理。...

feng_blog
2015/09/01
268
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
0
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
昨天
1
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
昨天
1
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
昨天
0
0
非常实用的IDEA插件之总结

1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...

Gibbons
昨天
1
0
Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...

TaoXu
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部