对于服务器 socketChannel (ServerSocketChannel),唯一(也只能)关心的操作是 OP_ACCEPT(表示一个新的客户端连接)。
一般一个线程应可以共享一个 Buffer 。
在没有客户端请求时,Selector.select() 将一直堵塞。应该将此做为唯一的堵塞时刻(在 I/0 Socket 中,在读数据时也会堵塞),做为服务器一般会无限循环此条件。
在自 Selector.selectedKeys().iterator() 中得到的 SelectionKey 时,就应该调用 iterator 的remove() 方法将其自集合中删除,防止忘记删除或删除地点不统一。
客户端的读或写等操作应在 ServerSocketChannel 的 OP_ACCEPT 事件中进行初始注册(注册后会在下一次 Selector.select() 循环时调用)。即注册与客户端建立连接后要做的事情。然后在其他相应的操作中注册其他事件(一次会话在不同事件中相互调用)。
在 OP_ACCEPT 事件中应将客户端通道设置为非阻塞模式以允许服务器处理多个并发连接。
在读或写操作时应将对 Buffer 的操作放在循环中,以免一次不能处理完毕 Buffer 中的全部数据。
一次循环有时只能处理读或写的一部分操作(视 Buffer 大小与传递数据多少等而定),剩余数据将在下一次 Selector.select() 循环时处理,这与 I/O Socket 中等待数据全部到达时再处理从根本上不相同,要转变思想。
若希望关闭与客户端的会话只需将客户端通道关闭即可。
深入研究了 NIO Socket ,才深深体会到 Apache MINA 设计的美妙!
分享到:
相关推荐
缓冲区类型包括ByteBuffer、CharBuffer、IntBuffer、DoubleBuffer等,它们都继承自`java.nio.Buffer`。 3. **选择器(Selector)**:用于监听多个通道的事件(如连接就绪、数据到达等),当某个通道准备好进行读写...
使用NIO socket不需要多线程来处理多个连接的请求,效率非常高 可以作为NIO socket入门的例子,Reactor模式,重点理解key.attach, jar文件里包含了源代码 1,运行server.bat启动服务器,可以打开编辑,修改端口号 ...
本例包含服务器端和客户端,多线程,每线程多次发送,Eclipse工程,启动服务器使用 nu.javafaq.server.NioServer,启动客户端使用 nu.javafaq.client.NioClient。另本例取自javafaq.nv上的程序修改而成
### Java NIO 实现Socket通信详解 #### 一、NIO与传统IO的区别及优势 在探讨如何使用Java NIO实现Socket通信之前,我们需要先理解NIO(Non-blocking I/O,非阻塞I/O)与传统阻塞I/O之间的区别。 **传统阻塞I/O...
Java NIO(Non-blocking Input/Output)是一种在Java中实现高效网络编程的机制,相比于传统的BIO(Blocking I/O),NIO提供了更好的并发性能。在Java NIO中,服务器端可以使用一个线程来处理多个客户端连接,这被...
Ioserver java Nio socket 框架 是个不错的NIO 通讯框架,本来想学习mina框架,看了看mina的源码太头痛,本人觉得看懂了Ioserver 再看mina的框架,想多的学习 java NIO 的也可以下载 看看,很值得学习啊!!!
java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...
在这个“基于java NIO的socket通信demo”中,我们将探讨如何使用NIO进行服务器和客户端的Socket通信,并解决通信过程中的字符集乱码问题。 首先,我们来看`NioServer.java`。这个文件中包含了一个基于NIO的服务器端...
Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...
NioSocket是一个基于Java NIO(非阻塞I/O)技术实现的网络通信框架,它包含服务器端(Server)和客户端(Client)两部分。在Java编程中,NIO(New Input/Output)提供了一种不同于传统IO模型的I/O操作方式,其核心...
标题“nio.rar_NIO_NIO-socket_java nio_java 实例_java.nio”表明这个压缩包包含了一个关于Java NIO的实例,特别是关于NIO套接字(Socket)的编程示例。NIO套接字是Java NIO库中用于网络通信的关键组件,它们允许...
标题中的“Java socketA_java nio_java socket a”可能是指使用Java NIO实现的Socket通信,这里的"A"可能是表示"Advanced"或"Alternative",意味着比传统的阻塞I/O模型更为高级或替代方案。 在Java Socket API中,...
自Java 1.4版本引入NIO后,它为Java开发者提供了更高效的数据传输方式,尤其是在处理大量并发连接时。NIO的核心在于通道(Channels)和缓冲区(Buffers)的概念,与传统的流(Streams)有所不同。 1. **通道...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java平台中用于替代标准I/O(BIO)模型的一种新机制。NIO在Java 1.4版本引入,提供了更高效的数据处理和通道通信方式,特别适用于高并发、大数据...
在Java编程领域,Socket是网络通信的基础,它允许两个或多个应用程序通过TCP/IP协议进行数据交换。本篇文章将深入探讨如何使用Java NIO(非阻塞I/O)来实现阻塞多线程通信,这对于高性能服务器端应用尤其重要。我们...
Java NIO的总结, 对于新人入门理解很好, 使用Markdown编写
《网络通信测试与Java NIO Socket编程详解》 在信息技术高速发展的今天,网络通信成为了软件开发中的重要一环。为了确保网络应用的稳定性和效率,网络通信测试工具扮演了不可或缺的角色。"默蓝网络通信测试工具(NIO...
描述中提到的"用nio想的一个不阻塞NIOSocket例子"可能是一个Java NIO的Socket通信示例,利用NIO的Channel和Selector来实现客户端和服务器之间的非阻塞通信。通常,NIO中的SocketChannel用于网络通信,Selector用于...