`

java nio Selector(多路复用,异步阻塞)例子

    博客分类:
  • java
阅读更多
package znio;

import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Date;
import java.util.Iterator;
import java.util.Set;

public class DataServer {

	public static void main(String[] args) throws Exception {
		
		int[] ports = {8001,8002,8003,8004,8005};
		Selector selector = Selector.open();
		
		for(int i=0; i<ports.length; i++){
			ServerSocketChannel ssc = ServerSocketChannel.open();
			ssc.configureBlocking(false);
			ServerSocket ss = ssc.socket();
			InetSocketAddress isa = new InetSocketAddress(ports[i]);
			ss.bind(isa);
			ssc.register(selector, SelectionKey.OP_ACCEPT);
			System.out.println("服务器运行,在端口" + ports[i] + "上监听!");
		}

		int keysAdd = 0;
		while((keysAdd = selector.select()) > 0){
			Set<SelectionKey> selectedKeys = selector.selectedKeys();
			Iterator<SelectionKey> iter = selectedKeys.iterator();
			while(iter.hasNext()){
				SelectionKey selectedKey = iter.next();
				if(selectedKey.isAcceptable()){
					ServerSocketChannel ssc = (ServerSocketChannel)selectedKey.channel();
					SocketChannel sc = ssc.accept();
					sc.configureBlocking(false);
					ByteBuffer bb = ByteBuffer.allocate(1024);
					bb.put(("server response time: " + new Date()).getBytes());
					bb.flip();
					sc.write(bb);
					sc.close();
				}
			}
			selectedKeys.clear();
		}
	}

}

 

分享到:
评论

相关推荐

    java NIO技巧及原理

    在Java NIO中,"新"主要体现在非阻塞和多路复用这两个特性上,这使得NIO更适合于高并发、低延迟的系统。 **Java IO原理:** Java IO基于流模型,分为输入流和输出流。流是一维数据序列,可以是从源到目标的单向流动...

    JAVA NIO 异步通信客户端

    2. **Selectors**: Selector是NIO中的多路复用器,它可以监控多个Channel,当它们准备就绪进行读写操作时,Selector会返回这些通道的键集。这样,单个线程就可以管理多个连接,提高了系统资源利用率。 3. **Buffers...

    Java NIO英文高清原版

    6. **多路复用器(Multiplexing)**:Java NIO的选择器实现了I/O多路复用,即单个线程可以同时处理多个连接,这在处理大量并发连接时非常有用。 7. **管道(Pipe)**:管道是两个线程间进行单向数据传输的通道。一...

    JAVA nio异步长连接服务端与客户端

    总的来说,Java NIO异步长连接服务端与客户端的实现涉及到网络编程、多路复用、缓冲区操作以及数据解析等多个知识点。通过合理利用NIO,可以构建高效、可扩展的网络应用程序。对于客户端读取的数据处理,可以根据...

    Java NIO测试示例

    NIO通过选择器实现多路复用,可以同时处理多个连接,这在高并发服务器中非常有用。例如,一个服务器可以监听多个SocketChannel,而无需为每个客户端连接创建一个新的线程,显著降低了线程创建和销毁的开销。 5. **...

    高手使用Java NIO编写高性能的服务器

    4. **多路复用器(Multiplexing)**:Java NIO的多路复用器基于操作系统提供的Select或Poll机制,如Linux下的epoll。它能有效地监控大量通道的状态,提高系统资源利用率。 5. **文件系统访问**:NIO也提供了对文件...

    java nio示例代码

    7. **多路复用器(Selectors)**:Java NIO的选择器允许一个线程处理多个通道,这在处理大量并发连接时非常有用,例如在服务器端的应用。 8. **异步IO**:Java NIO也提供了异步文件操作,通过...

    用java的nio技术实现的异步连接池

    Java的非阻塞I/O(New Input/Output,简称NIO)是Java 1.4引入的一个重要特性,它为处理高并发、低延迟的网络应用提供了强大的支持。在这个项目中,我们关注的是如何利用Java NIO来实现一个异步连接池。连接池是一种...

    《Java NIO》Download Url

    6. **多路复用器(Multiplexers)**:Java NIO中的Selector就是一种多路复用器,它可以同时处理多个通道的事件,实现I/O的非阻塞操作。 7. **异步I/O**:Java NIO2引入了异步文件操作和异步套接字操作,这些操作...

    java nio 尚硅谷 12讲 new

    - NIO则引入了选择器(Selector)和通道(Channel)的概念,实现非阻塞读写,提高了多路复用的能力。 2. **通道(Channel)** - Channel是数据传输的管道,可以连接到缓冲区(Buffer)或I/O设备。Java NIO提供了...

    Java NIO 中英文版 + Pro Java 7 NIO.2

    - 支持多路复用:一个线程可以通过选择器(Selector)同时监控多个通道。 2. **缓冲区(Buffers)**:缓冲区是数据操作的主要对象,它在内存中分配了一块区域来存储数据。缓冲区具有固定容量,提供了一组方法来...

    java-nio.rar_NIO_java nio

    - **NIO异步连接池**:利用Java NIO的非阻塞特性,可以在一个线程中管理多个连接,当请求到达时,无需等待连接建立完成,而是直接返回一个可用的连接,提高了服务响应速度。 4. **Java NIO的具体实现** - `java....

    JAVA NIO 简单PFT 文件服务

    总的来说,JAVA NIO PFT文件服务结合了非阻塞I/O、多路复用和高效的数据处理,为文件的上传、下载和列表展示提供了一个强大而灵活的解决方案。通过深入理解和熟练运用这些概念,开发者可以构建出高性能、高并发的...

    Java NIO原理解析

    此外,NIO还支持选择器的多路复用,使得单个线程可以处理大量并发连接,这对于构建高并发服务器来说是至关重要的。 总结来说,Java NIO通过非阻塞I/O和选择器机制,提供了更高效、灵活的I/O处理能力,降低了系统...

    第11讲 Java提供了哪些IO方式? NIO如何实现多路复用?1

    - 可以实现多路复用,允许单个线程处理多个通道的读写事件,提高了系统资源利用率。 - 使用选择器(Selector)进行轮询,发现哪个通道准备好进行IO操作,从而避免了线程阻塞。 - 提供了更底层的数据操作方式,...

    java nio服务器

    标题中的“java nio服务器”指的是使用Java NIO API构建的网络服务器,这种服务器设计模式通常被称为多路复用或非阻塞I/O服务器。NIO的核心组件包括通道(Channels)、缓冲区(Buffers)和选择器(Selectors)。下面...

    JavaNIO服务器实例Java开发Java经验技巧共6页

    - **选择器(Selectors)**:选择器允许单个线程检查多个通道的事件,如连接、可读、可写等,大大提升了多路复用的能力。 2. **NIO服务器实现**: - **服务器端的创建**:使用`ServerSocketChannel`打开并绑定到...

    Java NIO系列教程

    它允许单个线程同时监听多个数据通道,提高了多路复用的效率。 - **应用场景**:选择器特别适合于处理大量低流量的连接,如聊天服务器等场景。 - **工作流程**: 1. 将感兴趣的通道注册到选择器上,并指定要监听的...

Global site tag (gtag.js) - Google Analytics