对于服务器 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 设计的美妙!
分享到:
相关推荐
java nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socket
使用NIO socket不需要多线程来处理多个连接的请求,效率非常高 可以作为NIO socket入门的例子,Reactor模式,重点理解key.attach, jar文件里包含了源代码 1,运行server.bat启动服务器,可以打开编辑,修改端口号 ...
NULL 博文链接:https://b-l-east.iteye.com/blog/1254693
本例包含服务器端和客户端,多线程,每线程多次发送,Eclipse工程,启动服务器使用 nu.javafaq.server.NioServer,启动客户端使用 nu.javafaq.client.NioClient。另本例取自javafaq.nv上的程序修改而成
java NIO 高性能 socket通讯,服务端采用单线程,降低了cpu的压力,普通io socket通讯,server需要每个连接运行个线程,容易出现问题,效率也低
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 创建的服务端,能够异步响应客户端的请求,客户端采用nio异步请求服务端,通信之间的乱码使用charset解决
网络通信工具,服务端和客户端连接测试工具,可单条发送,循环发送,模拟多客户端发送,本工具可以作为网络通信工具或压力测试工具, Java NIO Socket编程,需JAVA运行环境
java nio 编程一个实例子.服务端程序
java 的socket的通道编程的代码api,可以是需要的网络开发的人员浏览
NULL 博文链接:https://1358440610-qq-com.iteye.com/blog/2115715
java解读NIOSocket非阻塞模式宣贯.pdf
基于java nio socket 的文件传输例程
Java,NIO,教程 非堵塞IO编程
java socket client 断线重连的简单实现 有什么意见可以提哦
socket通信nio模式有很多实现方式,但是在性能上、资源上一般很少考虑,这里封装了一个性能极强的程序。
Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 ...
几个用java写的小程序,实现了bio和nio
利用socketNIO实现的多客户端聊天室,非阻塞式IO,java代码编写,使用方法:先启动服务端代码再启动客户端代码,可启动多个客户端代码。若使用多个电脑启动客户端,需在客户端代码中更改一下ip地址。