`
buerkai
  • 浏览: 169542 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

openfire(7)底层框架介绍---mina

 
阅读更多

openfire和客户端之间的通信,主要使用了阿帕奇的mina框架,mina主要基于JDK的NIO,做了很多的封装,开发者不必关心底层网络,mina为你完成了这些,你只需将你的精力集中在业务层。

 

openfire中使用mina的版本比较低,好像是1.7版本,现在最新的版本是2.0.7,下面就以最新版本2.0.7做简单介绍。

 

 NioSocketAcceptor acceptor = new NioSocketAcceptor(); ---这个就是开启一个socket的服务器

acceptor.bind(new InetSocketAddress(18567));--绑定地址

acceptor.getFilterChain().addLast("log1", new LoggingFilter(getClass()));--增加拦截器

acceptor.setHandler(IoHandlerAdapter);--设置消息处理类

 

IoHandlerAdapter是一个抽象类,实现的IoHandler接口。

 

ioHandler:

public abstract interface IoHandler

{

  public abstract void sessionCreated(IoSession paramIoSession)

    throws Exception;

 

  public abstract void sessionOpened(IoSession paramIoSession)

    throws Exception;

 

  public abstract void sessionClosed(IoSession paramIoSession)

    throws Exception;

 

  public abstract void sessionIdle(IoSession paramIoSession, IdleStatus paramIdleStatus)

    throws Exception;

 

  public abstract void exceptionCaught(IoSession paramIoSession, Throwable paramThrowable)

    throws Exception;

 

  public abstract void messageReceived(IoSession paramIoSession, Object paramObject)

    throws Exception;

 

  public abstract void messageSent(IoSession paramIoSession, Object paramObject)

    throws Exception;

}

 

其运行流层是:

1.当客户端和服务端建立一个连接,会调用sessionCreated;

2.客户端向服务端发送数据,会调用sessionOpened------>messageReceived;

3.客户端和服务器之间的数据在messageReceived中获取。

4.当客户端闲置下来了,服务器会调用sessionIdle,这主要通过以下代码设置相关参数:

SocketSessionConfig scfg = acceptor.getSessionConfig();

cfg.setIdleTime(IdleStatus.BOTH_IDLE, 10);当10s钟没有进行读写操作就会调用sessionIdle方法。

 

IdleStatus有3个类型:READER_IDLE,WRITER_IDLE,BOTH_IDLE。READER_IDLE为读的空闲类型;WRITER_IDLE,写的空闲类型,BOTH_IDLE读写的空闲类型

 

在这个方法中,可以做检测服务端和客户端之间的连接是否中断,如果中断就做相关处理,比如把这个回话移除会话列表中。

 

5.当服务端要向客户端发送数据的时候,会调用messageSent。如服务端调用session.write(Object o);的时候,会调用此方法。

 

6.当客户端和服务端通信异常的时候,会调用exceptionCaught。这个地方一般需要做处理,比如关闭当前会话。

 

7.当关闭会话的时候会调用sessionClosed方法。一般在这个地方将会话列表中的会话移除。

 

 

8.服务端最重要的事情是:处理业务数据,建立拦截器。在通信同往往是以字节码的形式传送的,要识别对应的二进制,需要进行相关的处理。写相关的拦截器就能解决相关问题。

mina为我们已经提供了很多的拦截器,比如日志的:LoggingFilter,比如处理文本的:

dc.addLast("dec", new ProtocolCodecFilter(new TextLineCodecFactory(

Charset.forName("UTF-8"))));

这个将设置编码方式。

在 org.apache.mina.filter包中可以看到很多已经实现的过滤器。

对于过滤器自己实现。

实现接口ProtocolCodecFactory,在这个接口中需要显示加解码,加解码需要实现相关的接口ProtocolDecoder,ProtocolEncoder。

 

对于mina提供了传送对象的过滤器,如ObjectSerializationCodecFactory,相关对象需要序列化。

 

在通信中往往要设置自己的通信报文格式,现有的比较成熟的是XMPP提供的即时通信技术中就有相关介绍。

 

 

下面介绍客户端方面的:

IoConnector connector=new NioSocketConnector();--建立一个connection

SocketSessionConfig dcfg = (SocketSessionConfig) this.connector.getSessionConfig();--获取会话配置

ConnectFuture connFuture = this.connector.connect(new InetSocketAddress("localhost", 18567));--设置连接地址和端口

connFuture.awaitUninterruptibly();--等待建立连接

session = connFuture.getSession();--获取会话。

 

connector.setHandler(IOhandler o);客户端的IOhandler 和服务端的一样,在此就可以做和服务端的连接操作了。

 

 

只是对mina做了简单的介绍,更多请查阅其他资料。

此篇文章就到此,稍后会有更多关于openfire的个人解读。

联系方式(qq):851392159

出处:http://buerkai.iteye.com

分享到:
评论

相关推荐

    openfire综合介绍

    Openfire的底层通信处理依赖于Apache MINA框架。MINA是一个网络应用框架,它简化了高性能、高可靠性的网络应用程序的开发,通过Java NIO提供了对多种传输协议(如TCP/IP、UDP/IP)的支持。MINA的特点包括统一的API、...

    mina-1.1.7.tar(1).gz稳定版

    通过使用MINA框架可以可以省下处理底层I/O和线程并发等复杂工作,开发人员能够把更多的精力投入到业务设计和开发当中。MINA框架的应用比较广泛,应用的开源项目有Apache Directory、AsyncWeb、Apache Qpid、QuickFIX...

    Mina 框架研究与实现

    ### Mina框架研究与实现 #### 引言 在当今高度网络化的世界中,服务器端程序面临着前所未有的挑战,特别是当需要同时处理成百上千的客户端连接时。这不仅要求服务器具备高性能,还必须保证高可用性。Mina框架正是...

    Mina状态机介绍和实例

    通过使用MINA框架可以可以省下处理底层I/O和线程并发等复杂工作,开发人员能够把更多的精力投入到业务设计和开发当中。MINA框架的应用比较广泛,应用的开源项目有Apache Directory、AsyncWeb、Apache Qpid、QuickFIX...

    openfire开发资料

    Apache MINA 是Openfire底层通信处理的基础,它是一个网络应用框架,基于Java NIO(Non-blocking Input/Output)设计,提供了异步、事件驱动的网络编程接口。MINA 支持多种传输协议,如TCP/IP、UDP/IP,甚至串口通信...

    XMPP与MINA

    在Openfire,一个基于XMPP的开源即时通讯服务器中,MINA被用作底层的网络通信库。Openfire的核心组件XMPPServer在启动时,会加载一系列模块,其中包括ConnectionManagerImpl,它是负责处理客户端连接的模块。在这个...

    openfire即时消息处理

    Apache MINA是Openfire底层通信处理的关键,这是一个网络应用框架,专注于简化高性能、高可靠性的网络应用开发。MINA通过Java NIO(非阻塞I/O)提供了对TCP/IP、UDP/IP以及其他传输协议的支持,并具有过滤器机制、...

    java开源包7

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包1

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包10

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    operfire基础原理分析

    Openfire 基于 Apache MINA 框架,这是一款高度可定制的网络应用程序框架,利用 Java NIO 提供高性能、异步的网络通信能力。Apache MINA 提供了统一的 API,支持多种传输协议,如 TCP/IP、UDP/IP,甚至串口通信,...

    java开源包11

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包2

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包3

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包6

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包5

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包4

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

Global site tag (gtag.js) - Google Analytics