`
recopa
  • 浏览: 493 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于NIO的一些疑问(mina)

 
阅读更多
mina 1.17版本
用mina的NIO API写了Server端,但是用多线程模仿多并发来进行BIO Client连接,以查看NIO性能,在大概400-600的连接的时候就会connection refused。

每个连接一个线程,当连接数达到一定数量时,对server的资源的占用会很大,在这种情况下nio会更好。但是跑下来的效果并不是很理想。NIO不就是用于提高线程的利用率,将普通socket做不到的事情,让NIO去处理。但是现象已经发生,不知道那位愿意给小弟指正,给点分析。

server端:

public class NIOServer {
	  private static final int PORT = 9999;

	    public static void main(String[] args) throws IOException {
	    	Executor threadPool = Executors.newFixedThreadPool(1500);
	        //设置buffer
	        ByteBuffer.setUseDirectBuffers(false);
	        ByteBuffer.setAllocator(new SimpleByteBufferAllocator());
	        //定义acceptor
	        IoAcceptor acceptor = new SocketAcceptor();
	        //定义config
	        SocketAcceptorConfig cfg = new SocketAcceptorConfig();
	        //设置config,加入filter
	        cfg.setReuseAddress(true);
	        cfg.getSessionConfig().setReuseAddress( true );
	        cfg.getSessionConfig().setReceiveBufferSize(1024);
	        cfg.setThreadModel(ThreadModel.MANUAL);
	       // cfg.getSessionConfig().setTcpNoDelay(true);
	        cfg.getFilterChain().addLast( "logger", new LoggingFilter() );
	        cfg.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
	        cfg.getFilterChain().addLast("exector", new ExecutorFilter(threadPool));
	        //加入port handler cfg
	        acceptor.bind( new InetSocketAddress(PORT), new ServerHandler(), cfg);
	        System.out.println("MINA server started.");
	    }


public class ServerHandler extends IoHandlerAdapter {
	public void exceptionCaught(IoSession session, Throwable t) throws Exception {
        t.printStackTrace();
        session.close();
    }

    public void messageReceived(IoSession session, Object msg) throws Exception {
        
        System.out.println("messageReceived~");
    }

    public void sessionCreated(IoSession session) throws Exception {
        System.out.println("Session created");

        if( session.getTransportType() == TransportType.SOCKET )
            ((SocketSessionConfig) session.getConfig() ).setReceiveBufferSize( 2048 );

        session.setIdleTime( IdleStatus.BOTH_IDLE, 10 );
    } 
} 


client:
public class ClientThread extends Thread {
	public void run() {
		final long threadId = this.getId();
		System.out.println("thread id = " + threadId);
		send(String.valueOf(threadId));
	}
	
	public ClientThread(String name){
		super(name);
	}

	public static void main(String[] args) {
		System.out.println(Thread.currentThread().getName());
		ClientThread thread = new ClientThread("0");
		thread.start();
//假设500个连接
		for(int i = 1 ; i < 500; i++) {
			thread = new ClientThread(String.valueOf(i));
			thread.start();
		}
		
	}
	
	public static void send(String msg) {
		
		byte[] buffer = new byte[1024];
		InetSocketAddress endpoint = new InetSocketAddress("10.10.10.105" , 9999);  
		try {
			Socket socket = new Socket();
			socket.setSoLinger(true, 2);
			socket.setTcpNoDelay(true);
			socket.setReuseAddress(true);
			socket.connect(endpoint);  
			OutputStream outputStream = socket.getOutputStream();
			boolean isGo=true;
			for(int i = 0 ; i < 1; i++) {
				buffer = ( "Threadname = "  + Thread.currentThread().getName() + " ,Thread ID = " + msg).getBytes();
				outputStream.write(buffer);
				outputStream.flush();
				Thread.sleep(30000);
			}

			socket.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}



分享到:
评论

相关推荐

    网络编程(socket、NIO、mina)---demo

    在这个"网络编程(socket、NIO、mina)---demo"的主题中,我们将深入探讨三个关键概念:Socket编程、非阻塞I/O(Non-blocking I/O,简称NIO)以及Apache Mina框架。这些技术广泛应用于构建高性能、高并发的网络应用...

    Java springboot 整合mina 框架,nio通讯基础教程,mina框架基础教程.zip

    Java SpringBoot 整合Mina框架,涉及到的核心技术主要包括Java NIO(非阻塞I/O)、Mina框架以及SpringBoot的集成应用。本教程旨在帮助开发者深入理解和掌握这些技术,并提供了一个可直接使用的基础平台框架。 Java ...

    深入理解Apache Mina (6)---- Java Nio ByteBuffer与Mina ByteBuffer的区别

    本篇将深入探讨Java NIO(非阻塞I/O)中的ByteBuffer和Mina库自定义的ByteBuffer之间的区别。 Java NIO的ByteBuffer是Java标准库提供的一个核心类,它是通道(Channel)和缓冲区(Buffer)之间数据传输的主要媒介。它...

    Mina NIO Socket

    《Mina NIO Socket:深度解析与应用》 在Java世界中,网络编程是一个不可或缺的部分,而Mina NIO(Non-blocking I/O)Socket库则是Java开发者实现高性能、高并发网络服务的重要工具。本文将深入探讨Mina NIO Socket...

    nio.rar_NIO_java nio_java_nio_mina java n

    5. **Java NIO与Mina**:Mina是一个高性能、轻量级的网络应用框架,它利用了Java NIO的特性来构建网络服务。Mina提供了一套高级API,简化了基于NIO的网络编程,包括TCP和UDP协议的支持,以及过滤器链机制,方便实现...

    一般Socket客户端与Mina NIO Socket客户端对比示例

    本文将通过一个对比实例,探讨一般Socket客户端与Mina NIO (Non-blocking I/O) Socket客户端的差异和特点,帮助开发者理解这两种技术在实际应用中的选择。 首先,普通Socket客户端基于BIO(Blocking I/O)模型,它...

    Java视频教程 Java游戏服务器端开发 Netty NIO AIO Mina视频教程

    jaca视频教程 jaca游戏服务器端开发 Netty NIO AIO Mina视频教程 课程目录: 一、Netty快速入门教程 01、第一课NIO 02、第二课netty服务端 03、第三课netty客户端 04、第四课netty线程模型源码分析(一) 05、...

    Java_nio&mina技术调研报告

    MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、易用的网络应用程序框架,基于Java NIO构建。MINA为开发者提供了高度抽象的API,简化了网络编程的复杂性。MINA支持TCP和UDP协议,适用...

    练练手,用mina2.0搭建一个nio客户端

    标题中的“练练手,用mina2.0搭建一个nio客户端”表明了本文将探讨如何使用Mina 2.0框架构建一个基于非阻塞I/O(NIO)的客户端应用。Mina是一个开源的Java框架,常用于开发高性能、高并发的网络通信应用,如TCP/IP和...

    NIO_MINA学习例子_源代码

    NIO (Non-blocking Input/Output) 和 MINA (Multipurpose Infrastructure for Network Applications) 是Java中用于高性能网络应用的两个重要框架。NIO是Java标准库的一部分,提供了与传统IO(Blocking I/O)不同的I/...

    基于MINA构建高性能的NIO应用

    ### 基于MINA构建高性能的NIO应用 #### 概述 MINA作为一款优秀的客户端/服务器架构下的Java服务器框架,凭借其强大的功能和灵活性,在开发高性能网络应用程序方面表现突出。本文将深入探讨MINA的核心概念、优势...

    springboot 整合mina 源码,nio通讯基础教程,mina框架基础教程.rar

    关于Java NIO,它是Java标准库提供的一种I/O模型,与传统的 Blocking I/O 相比,NIO的关键在于选择器(Selector)。选择器允许单个线程监视多个通道,从而提高了系统的并发性。在NIO中,数据读写不再依赖于阻塞式的...

    mina框架--MINA框架是对java的NIO包的一个封装

    MINA(Multipurpose Infrastructure for Network Applications)框架是Apache软件基金会的一个开源项目,它提供了一种高级的、事件驱动的网络应用程序框架,用于简化基于Java的网络编程,特别是使用非阻塞I/O(Non-...

    基于高性能NIO的MINA框架的应用

    MINA框架(Multipurpose Infrastructure for Network Applications)是基于Java NIO设计的网络应用程序框架,其特点是采用松耦合架构,支持灵活的过滤器机制,同时单元测试也更为容易实现。MINA允许自定义线程数量,...

    从Jetty、Tomcat和Mina中提炼NIO构架网络服务器的经典模式

    Jetty、Tomcat和Mina都是Java领域中著名的Web服务器和应用服务器,它们在NIO架构上有着相似的设计模式。本文将从这三个框架中提炼出NIO构架网络服务器的经典模式,并逐一解析它们的核心机制。 首先,Jetty的NIO实现...

    基于MINA构建简单高性能的NIO应用

    - 在MINA中使用IoFilter来处理一些共用的、与业务逻辑无关的功能,可以使得应用结构更加清晰,便于维护和扩展。 - 应用程序中重载`IoHandler`的事件方法来响应客户端的不同事件。例如`messageReceived`是用来处理...

    基于MINA构建简单高性能的NIO应用.pdf

    "基于MINA构建简单高性能的NIO应用.pdf" 这个标题指出,文档主要讨论如何使用MINA框架来构建一个基于非阻塞I/O (Non-blocking I/O, NIO) 的应用程序。MINA是一个开源的Java框架,专为网络通信设计,特别是高性能、高...

    基于 MINA 的 TLS/SSL NIO Socket 实现(二)

    在本篇博文中,我们将深入探讨如何利用Apache MINA库实现基于TLS/SSL的NIO(非阻塞I/O)Socket通信。MINA是一个高度可扩展的网络应用框架,广泛用于构建高性能、高并发的网络应用程序,如服务器端的TCP和UDP服务。...

    原创nio socket mina+javascript+flash实现commet长连接网页聊天室

    【标题】"原创nio socket mina+javascript+flash实现commet长连接网页聊天室"揭示了一个基于Java NIO(Non-blocking I/O)的Socket通信框架Mina与JavaScript、Flash技术结合,实现COMET(Comet是使服务器向浏览器推...

Global site tag (gtag.js) - Google Analytics