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编程、非阻塞I/O(Non-blocking I/O,简称NIO)以及Apache Mina框架。这些技术广泛应用于构建高性能、高并发的网络应用...
Java SpringBoot 整合Mina框架,涉及到的核心技术主要包括Java NIO(非阻塞I/O)、Mina框架以及SpringBoot的集成应用。本教程旨在帮助开发者深入理解和掌握这些技术,并提供了一个可直接使用的基础平台框架。 Java ...
本篇将深入探讨Java NIO(非阻塞I/O)中的ByteBuffer和Mina库自定义的ByteBuffer之间的区别。 Java NIO的ByteBuffer是Java标准库提供的一个核心类,它是通道(Channel)和缓冲区(Buffer)之间数据传输的主要媒介。它...
《Mina NIO Socket:深度解析与应用》 在Java世界中,网络编程是一个不可或缺的部分,而Mina NIO(Non-blocking I/O)Socket库则是Java开发者实现高性能、高并发网络服务的重要工具。本文将深入探讨Mina NIO Socket...
5. **Java NIO与Mina**:Mina是一个高性能、轻量级的网络应用框架,它利用了Java NIO的特性来构建网络服务。Mina提供了一套高级API,简化了基于NIO的网络编程,包括TCP和UDP协议的支持,以及过滤器链机制,方便实现...
本文将通过一个对比实例,探讨一般Socket客户端与Mina NIO (Non-blocking I/O) Socket客户端的差异和特点,帮助开发者理解这两种技术在实际应用中的选择。 首先,普通Socket客户端基于BIO(Blocking I/O)模型,它...
jaca视频教程 jaca游戏服务器端开发 Netty NIO AIO Mina视频教程 课程目录: 一、Netty快速入门教程 01、第一课NIO 02、第二课netty服务端 03、第三课netty客户端 04、第四课netty线程模型源码分析(一) 05、...
MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、易用的网络应用程序框架,基于Java NIO构建。MINA为开发者提供了高度抽象的API,简化了网络编程的复杂性。MINA支持TCP和UDP协议,适用...
标题中的“练练手,用mina2.0搭建一个nio客户端”表明了本文将探讨如何使用Mina 2.0框架构建一个基于非阻塞I/O(NIO)的客户端应用。Mina是一个开源的Java框架,常用于开发高性能、高并发的网络通信应用,如TCP/IP和...
NIO (Non-blocking Input/Output) 和 MINA (Multipurpose Infrastructure for Network Applications) 是Java中用于高性能网络应用的两个重要框架。NIO是Java标准库的一部分,提供了与传统IO(Blocking I/O)不同的I/...
### 基于MINA构建高性能的NIO应用 #### 概述 MINA作为一款优秀的客户端/服务器架构下的Java服务器框架,凭借其强大的功能和灵活性,在开发高性能网络应用程序方面表现突出。本文将深入探讨MINA的核心概念、优势...
关于Java NIO,它是Java标准库提供的一种I/O模型,与传统的 Blocking I/O 相比,NIO的关键在于选择器(Selector)。选择器允许单个线程监视多个通道,从而提高了系统的并发性。在NIO中,数据读写不再依赖于阻塞式的...
MINA(Multipurpose Infrastructure for Network Applications)框架是Apache软件基金会的一个开源项目,它提供了一种高级的、事件驱动的网络应用程序框架,用于简化基于Java的网络编程,特别是使用非阻塞I/O(Non-...
MINA框架(Multipurpose Infrastructure for Network Applications)是基于Java NIO设计的网络应用程序框架,其特点是采用松耦合架构,支持灵活的过滤器机制,同时单元测试也更为容易实现。MINA允许自定义线程数量,...
Jetty、Tomcat和Mina都是Java领域中著名的Web服务器和应用服务器,它们在NIO架构上有着相似的设计模式。本文将从这三个框架中提炼出NIO构架网络服务器的经典模式,并逐一解析它们的核心机制。 首先,Jetty的NIO实现...
- 在MINA中使用IoFilter来处理一些共用的、与业务逻辑无关的功能,可以使得应用结构更加清晰,便于维护和扩展。 - 应用程序中重载`IoHandler`的事件方法来响应客户端的不同事件。例如`messageReceived`是用来处理...
"基于MINA构建简单高性能的NIO应用.pdf" 这个标题指出,文档主要讨论如何使用MINA框架来构建一个基于非阻塞I/O (Non-blocking I/O, NIO) 的应用程序。MINA是一个开源的Java框架,专为网络通信设计,特别是高性能、高...
在本篇博文中,我们将深入探讨如何利用Apache MINA库实现基于TLS/SSL的NIO(非阻塞I/O)Socket通信。MINA是一个高度可扩展的网络应用框架,广泛用于构建高性能、高并发的网络应用程序,如服务器端的TCP和UDP服务。...
【标题】"原创nio socket mina+javascript+flash实现commet长连接网页聊天室"揭示了一个基于Java NIO(Non-blocking I/O)的Socket通信框架Mina与JavaScript、Flash技术结合,实现COMET(Comet是使服务器向浏览器推...