`

mina 服务端启动源码阅读

    博客分类:
  • mina
阅读更多
$home=org.apache.mina
启动过程中,主要业务开始于
$home.core.polling.AbstractPollingIoAcceptor.Acceptor
线程类监听,

case1:未初始化server,进行绑定初始化
具体绑定代码在
$home.transport.socket.nio.NioSocketAcceptor.open(SocketAddress localAddress){
	           channel.configureBlocking(false);
		   //部分代码
	    ServerSocketChannel channel = ServerSocketChannel.open();
            ServerSocket socket = channel.socket();
            socket.setReuseAddress(isReuseAddress());
            socket.bind(localAddress, getBacklog());
            channel.register(selector, SelectionKey.OP_ACCEPT);
}


case2:clent的其他事件

  $home.polling.AbstractPollingIoAcceptor.Acceptor.processHandles(Iterator<H> handles){
	
	A.获取session
	 S session = accept(processor, handle);
	B.初始化session
	initSession(session, null, null);
	C.启动线程处理事件
	session.getProcessor().add(session);
	
  } 



  A中accept方法调用
  $home.transport.socket.nio.NioSocketAcceptor.accept(IoProcessor<NioSession> processor, ServerSocketChannel handle){
		      SelectionKey key = handle.keyFor(selector);

               // 部分代码
		SocketChannel ch = handle.accept();
		return new NioSocketSession(this, processor, ch);
 }	


C中add方法会调用
 $home.core.polling.AbstractPollingIoProcessor.startupProcessor(){
        //D
	Processor processor = processorRef.get();
	//部分代码,启动新线程处理事件
        if (processor == null) {
            processor = new Processor();

            if (processorRef.compareAndSet(null, processor)) {
                executor.execute(new NamePreservingRunnable(processor, threadName));
            }
        }
 }


D处的Processor是内部类$HOME.polling.AbstractPollingIoProcessor.Processor.
是一个线程类,其中主要业务方法
 read(S session){
        //部分代码

        IoSessionConfig config = session.getConfig();
	//用到了启动server时的session配置
        int bufferSize = config.getReadBufferSize();
        IoBuffer buf = IoBuffer.allocate(bufferSize);

        final boolean hasFragmentation = session.getTransportMetadata().hasFragmentation();
        try {
            int readBytes = 0;
            int ret;
            try {
                if (hasFragmentation) {
                    while ((ret = read(session, buf)) > 0) {
                        readBytes += ret;

                        if (!buf.hasRemaining()) {
                            break;
                        }
                    }
                } else {
                    ret = read(session, buf);

                    if (ret > 0) {
                        readBytes = ret;
                    }
                }
            } finally {
                buf.flip();
            }
            //有内容,依次调用配置的filter
            if (readBytes > 0) {
                IoFilterChain filterChain = session.getFilterChain();
                filterChain.fireMessageReceived(buf);
                buf = null;
                if (hasFragmentation) {
                    if (readBytes << 1 < config.getReadBufferSize()) {
                        session.decreaseReadBufferSize();
                    } else if (readBytes == config.getReadBufferSize()) {
                        session.increaseReadBufferSize();
                    }
                }
            }
 }
0
0
分享到:
评论

相关推荐

    MINA 服务端和客户端demo

    在"minaServer.rar"和"minaClient.rar"这两个压缩包中,分别包含了服务端和客户端的源代码示例。通过学习和运行这些示例,你可以深入了解MINA如何工作,以及如何利用MINA快速开发自己的网络应用。在实际项目中,可以...

    mina mmorpg服务端源码

    《mina mmorpg服务端源码解析》 在游戏开发领域,尤其是大型多人在线角色扮演游戏(MMORPG)的设计与实现中,服务端源码扮演着至关重要的角色。"mina mmorpg服务端源码"是一个专注于游戏服务器端开发的项目,其核心...

    mina2服务端客户端实例,保证能够正常运行

    描述中的"直接导入Eclipse项目即可"意味着这个压缩包包含了一个完整的Eclipse项目结构,包括必要的源代码文件、配置文件以及可能的依赖库。开发者无需进行复杂的设置,只需将项目导入到Eclipse中,就可以编译和运行...

    mina server开发服务端/客户端代码

    本压缩包包含的是使用Mina Server开发的服务端和客户端的源代码示例,非常适合初学者和有经验的开发者用来学习和参考。 服务端开发: 在Mina中,服务端通常通过创建一个Acceptor来监听特定的端口,等待客户端的连接...

    mina新手教程源码 mina+springboot+idea最简单的案例。

    mina新手案例,mina新手教程源码 mina+springboot最简单的案例。用的IDEA * mina服务端 * 1、添加@Controller注解和 @PostConstruct注解,代表... * 2、如果不想启动springboot,可以单独运行mina服务端的main方法。

    服务端基于MINA2的UDP双向通信Demo演示(MINA2服务端)

    “服务端基于MINA2的UDP双向通信Demo演示(MINA2服务端)” 这个标题表明这是一个使用MINA2框架在服务端实现的UDP(User Datagram Protocol)双向通信的示例代码。MINA2是一个开源的Java网络应用程序框架,它简化了...

    mina服务端例子

    在这个“Mina服务端例子”中,我们主要探讨的是如何使用Mina框架来实现一个基于Socket的非阻塞I/O(NIO)服务端。 1. **Mina框架介绍**: Mina提供了事件驱动和异步处理模型,使得开发者可以专注于业务逻辑,而...

    MINA服务端Demo

    8. **编译与运行**:在获取到MINA的源代码后,通常需要通过Maven或Gradle等构建工具来编译和打包项目,然后通过Java命令运行生成的可执行文件,启动MINA服务端。 9. **调试与测试**:在开发过程中,可以使用MINA...

    一个源代码学习服务端 ,基于mina

    【标题】:“一个源代码学习服务端,基于Mina” Mina(JavaMinimal Asynchronous Network Library)是一个开源的网络通信框架,由Apache软件基金会维护。它提供了高度可扩展且低级别的网络应用程序接口,用于构建高...

    MINA客户端与服务端通信实例

    1. 创建一个`IoAcceptor`实例,它是MINA服务端的核心组件,用于监听客户端的连接请求。通常我们会选择`NioSocketAcceptor`,因为它基于Java NIO实现。 2. 定义一个`ProtocolDecoder`和`ProtocolEncoder`,用于解码...

    mina 长连接 客户端+服务端

    这个名为"Minademo"的压缩包文件可能包含了实现上述功能的源代码和相关文档。解压后,可以通过阅读代码和文档来了解具体实现细节,以便于理解和学习如何在实际项目中运用Mina实现长连接的客户端和服务端。 总的来说...

    mina-master_mina_

    1. **源代码**:MINA服务端的Java源代码,通常会包括一个或多个`Handler`类,这些类是MINA的核心部分,处理网络事件和数据传输。例如,`EchoHandler`可能会实现简单的回显服务,接收客户端发送的数据并原样返回。 2...

    apache mina-spring 服务端程序

    2. **服务端入口类**:启动Mina服务器的Java类,通常会包含Spring容器的初始化和网络监听端口的设置。 3. **业务处理器**:实现了Mina的IoHandler接口,处理来自客户端的事件和数据。 4. **协议编码解码器**:用于将...

    apache-mina源码

    通过阅读和分析`apache-mina-2.0.16`的源码,我们可以深入理解MINA的设计思想,学习如何构建高效的网络服务,并能根据自己的需求定制和扩展MINA的功能。对于想要从事网络编程或系统架构设计的开发者来说,研究MINA...

    MINA/JAVA游戏服务端源码

    我是个新手,有出错的地方莫怪哈,把源码发布出来更多的是想大伙帮忙改进下框架,改进的代码和新版本希望能够发到我的邮箱:xiamiy01@gmail.com,我会把新的修改和新版本发布出来,为大家服务。 文件夹简介: ...

    一个Apache MINA使用案例源代码ApacheMina

    4. **Service启动与配置**: 源代码中应包含如何创建和启动MINA服务的代码。这通常涉及到设置服务器端口、配置IoAcceptor、添加过滤器到过滤器链,以及绑定IoHandler。 5. **Client连接**: 如果源代码包含了客户端...

    mina框架源码及jar包

    Apache Mina是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务端应用程序。它提供了简单的API,使得开发者能够专注于应用逻辑,而不是底层的网络编程细节。在本压缩包"apache-mina-2.0.4"中,包含...

    mina框架中socket使用,有服务端和客户端。

    7. **项目结构**:这个项目可能包含了服务端和客户端的源代码,以及必要的配置文件。服务端代码中会有创建`NioServerSocketConnector`,注册事件处理器,启动服务器的逻辑。客户端代码则包含创建`NioSocketConnector...

    mina2推送demo服务端

    - 阅读源代码,了解如何初始化Mina服务器,设置监听端口,创建过滤器链,以及处理网络事件。 - 运行服务端并用UDP客户端发送数据,观察服务器如何回显接收到的数据,以验证其功能。 - 修改过滤器链,添加自己的业务...

    mina2 源码 mina

    标题"mina2 源码 mina"暗示我们将探讨MINA2的源代码,这是一个非常有价值的资源,对于理解MINA的工作原理、学习如何构建网络应用程序以及定制MINA的行为非常有用。MINA的源码包含了丰富的注释和示例,可以帮助开发者...

Global site tag (gtag.js) - Google Analytics