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中,"新"主要体现在非阻塞和多路复用这两个特性上,这使得NIO更适合于高并发、低延迟的系统。 **Java IO原理:** Java IO基于流模型,分为输入流和输出流。流是一维数据序列,可以是从源到目标的单向流动...
2. **Selectors**: Selector是NIO中的多路复用器,它可以监控多个Channel,当它们准备就绪进行读写操作时,Selector会返回这些通道的键集。这样,单个线程就可以管理多个连接,提高了系统资源利用率。 3. **Buffers...
6. **多路复用器(Multiplexing)**:Java NIO的选择器实现了I/O多路复用,即单个线程可以同时处理多个连接,这在处理大量并发连接时非常有用。 7. **管道(Pipe)**:管道是两个线程间进行单向数据传输的通道。一...
总的来说,Java NIO异步长连接服务端与客户端的实现涉及到网络编程、多路复用、缓冲区操作以及数据解析等多个知识点。通过合理利用NIO,可以构建高效、可扩展的网络应用程序。对于客户端读取的数据处理,可以根据...
NIO通过选择器实现多路复用,可以同时处理多个连接,这在高并发服务器中非常有用。例如,一个服务器可以监听多个SocketChannel,而无需为每个客户端连接创建一个新的线程,显著降低了线程创建和销毁的开销。 5. **...
4. **多路复用器(Multiplexing)**:Java NIO的多路复用器基于操作系统提供的Select或Poll机制,如Linux下的epoll。它能有效地监控大量通道的状态,提高系统资源利用率。 5. **文件系统访问**:NIO也提供了对文件...
7. **多路复用器(Selectors)**:Java NIO的选择器允许一个线程处理多个通道,这在处理大量并发连接时非常有用,例如在服务器端的应用。 8. **异步IO**:Java NIO也提供了异步文件操作,通过...
Java的非阻塞I/O(New Input/Output,简称NIO)是Java 1.4引入的一个重要特性,它为处理高并发、低延迟的网络应用提供了强大的支持。在这个项目中,我们关注的是如何利用Java NIO来实现一个异步连接池。连接池是一种...
6. **多路复用器(Multiplexers)**:Java NIO中的Selector就是一种多路复用器,它可以同时处理多个通道的事件,实现I/O的非阻塞操作。 7. **异步I/O**:Java NIO2引入了异步文件操作和异步套接字操作,这些操作...
- NIO则引入了选择器(Selector)和通道(Channel)的概念,实现非阻塞读写,提高了多路复用的能力。 2. **通道(Channel)** - Channel是数据传输的管道,可以连接到缓冲区(Buffer)或I/O设备。Java NIO提供了...
- 支持多路复用:一个线程可以通过选择器(Selector)同时监控多个通道。 2. **缓冲区(Buffers)**:缓冲区是数据操作的主要对象,它在内存中分配了一块区域来存储数据。缓冲区具有固定容量,提供了一组方法来...
- **NIO异步连接池**:利用Java NIO的非阻塞特性,可以在一个线程中管理多个连接,当请求到达时,无需等待连接建立完成,而是直接返回一个可用的连接,提高了服务响应速度。 4. **Java NIO的具体实现** - `java....
总的来说,JAVA NIO PFT文件服务结合了非阻塞I/O、多路复用和高效的数据处理,为文件的上传、下载和列表展示提供了一个强大而灵活的解决方案。通过深入理解和熟练运用这些概念,开发者可以构建出高性能、高并发的...
此外,NIO还支持选择器的多路复用,使得单个线程可以处理大量并发连接,这对于构建高并发服务器来说是至关重要的。 总结来说,Java NIO通过非阻塞I/O和选择器机制,提供了更高效、灵活的I/O处理能力,降低了系统...
- 可以实现多路复用,允许单个线程处理多个通道的读写事件,提高了系统资源利用率。 - 使用选择器(Selector)进行轮询,发现哪个通道准备好进行IO操作,从而避免了线程阻塞。 - 提供了更底层的数据操作方式,...
标题中的“java nio服务器”指的是使用Java NIO API构建的网络服务器,这种服务器设计模式通常被称为多路复用或非阻塞I/O服务器。NIO的核心组件包括通道(Channels)、缓冲区(Buffers)和选择器(Selectors)。下面...
- **选择器(Selectors)**:选择器允许单个线程检查多个通道的事件,如连接、可读、可写等,大大提升了多路复用的能力。 2. **NIO服务器实现**: - **服务器端的创建**:使用`ServerSocketChannel`打开并绑定到...
它允许单个线程同时监听多个数据通道,提高了多路复用的效率。 - **应用场景**:选择器特别适合于处理大量低流量的连接,如聊天服务器等场景。 - **工作流程**: 1. 将感兴趣的通道注册到选择器上,并指定要监听的...