WEB开发网
开发学院软件开发Java 深入理解Apache Mina(5)---- 配置Mina的 线... 阅读

深入理解Apache Mina(5)---- 配置Mina的 线程模型

 2009-09-16 00:00:00 来源:WEB开发网   
核心提示: Java代码<span><spanstyle="font-size:small;">DefaultIoFilterChainBuilderfilterChainBuilder=acceptor.getDefaultConfig().getFilterC

Java代码

<span><span style="font-size: small;">DefaultIoFilterChainBuilder filterChainBuilder = acceptor.getDefaultConfig().getFilterChain();    
// 和CPU绑定的操作配置在过滤器的前面  
filterChainBuilder.addLast("codec", new ProtocolCodecFactory(...));    
// 添加线程池    
filterChainBuilder.addLast("threadPool", new ExecutorFilter(Executors.newCachedThreadPool());      
</span></span>

因为你自己实现的ProtocolCodecFactory直接读取和转换的是二进制数据,这些数据都是由和CPU绑定的I/O Processor来读取和发送的,因此为了不影响系统的性能,也应该将数据的编解码操作绑定到I/O Processor线程中,因为在Java中创建和线程切换都是比较耗资源的,因此建议将ProtocolCodecFactory配置在 ExecutorFilter的前面。关于ProtocolCodecFactory详细讲述会在后续的文档中给出,此处就不多说了。

最后给出一个服务器线程模型完整配置的例子,该例子和KFCClient一起配置使用,详细代码在附件中,此处只给出代码的主要部分:       

Java代码 深入理解Apache Mina(5)---- 配置Mina的 线程模型

<span><span style="font-size: small;">SocketAddress address = new InetSocketAddress("localhost", 4321);  
        /*** 
         * 配置SocketAcceptor监听器的I/O Processor的线程的数量, 此处的I/O 
         * Processor的线程数量由CPU的核数决定,但Acceptor 的线程数量只有一个,也就是接收客户端连接的线程数只有一个, 
         * Acceptor的线程数量不能配置。 
         * */  
        IoAcceptor acceptor = new SocketAcceptor(Runtime.getRuntime()  
                .availableProcessors() + 1, Executors.newCachedThreadPool());  
  
        acceptor.getDefaultConfig().setThreadModel(ThreadModel.MANUAL);  
        // 配置数据的编解码器  
        acceptor.getDefaultConfig().getFilterChain().addLast("codec",  
                new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));  
  
        // 此处为你自己实现的编解码器  
        // config.getFilterChain().addLast("codec", new  
        // ProtocolCodecFactory(...));  
  
        // 为IoFilterChain添加线程池  
        acceptor.getDefaultConfig().getFilterChain().addLast("threadPool",  
                new ExecutorFilter(Executors.newCachedThreadPool()));  
        acceptor.getDefaultConfig().getFilterChain().addLast("logger",  
                new LoggingFilter());  
        // 绑定服务器端口  
        acceptor.bind(address, new KFCFoodPriceHandler());  
        System.out.println("  服务器开始在 8000 端口监听 .......");  
        // ==========================================//  
        // 此处为客户端的I/O Processor线程数的配置,你可以模仿 //  
        // IoAcceptor配置来实现 //  
        // ==========================================//  
        /*** 
         * 配置SocketConnector监听器的I/O Processor的线程的数量, 此处的I/O 
         * Processor的线程数量由CPU的核数决定,但SocketConnector 
         * 的线程数量只有一个,也就是接收客户端连接的线程数只有一个, SocketConnector的线程数量不能配置。 
         * */  
        // SocketConnector connector = new SocketConnector(Runtime.getRuntime()  
        // .availableProcessors() + 1, Executors.newCachedThreadPool());  
    }   </span></span><span><span style="font-size: small;"> </span></span> 

上一页  1 2 3 4 5 

Tags:深入 理解 Apache

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接