Selector
摘要:选择器是 Java 多路复用模型的一个实现,可以同时监控多个非阻塞套接字通道。示意图大致如下: 创建选择器 选择器 Selector 是一个抽象类,所以不能直接创建。Selector 提供了一个 open 方法,通过 open 方法既可以创建选择器实例。示例代码如下: Java 选择器是对底层多路复
阅读全文
posted @
2018-10-22 16:47
溪水静幽
阅读(630)
推荐(0) 编辑
NIO之套接字通道
摘要:使用过 Unix/Linux 系统下的 socket 接口,那么对 socket 编程的过程应该有一些了解。对于 TCP 服务端,接口调用的顺序为socket() -> bind() -> listen() -> accept() -> 其他操作 -> close(),客户端的顺序为socket()
阅读全文
posted @
2018-10-22 15:58
溪水静幽
阅读(190)
推荐(0) 编辑
JAVA NIO之文件通道
摘要:创建通道 FileChannel 是一个用于连接文件的通道,通过该通道,既可以从文件中读取,也可以向文件中写入数据。与SocketChannel 不同,FileChannel 无法设置为非阻塞模式,这意味着它只能运行在阻塞模式下。在使用FileChannel 之前,需要先打开它。由于 FileCha
阅读全文
posted @
2018-10-22 15:34
溪水静幽
阅读(104)
推荐(0) 编辑
NIO的缓冲区
摘要:继承体系 Buffer 的继承类比较多,用于存储各种类型的数据。包括 ByteBuffer、CharBuffer、IntBuffer、FloatBuffer 等等。这其中,ByteBuffer 最为常用。所以接下来将会主要分析 ByteBuffer 的实现。Buffer 的继承体系图如下: 属性及相
阅读全文
posted @
2018-10-22 15:06
溪水静幽
阅读(132)
推荐(0) 编辑
Reactor模型
摘要:Reactor 模式基于事件驱动,特别适合处理海量的 I/O 事件 The reactor design pattern is an event handling pattern for handling service requests delivered concurrently to a se
阅读全文
posted @
2018-10-22 12:12
溪水静幽
阅读(145)
推荐(0) 编辑
深入剖析socket——TCP套接字的生命周期
摘要:建立TCP连接 新的Socket实例创建后,就立即能用于发送和接收数据。也就是说,当Socket实例返回时,它已经连接到了一个远程终端,并通过协议的底层实现完成TCP消息或握手信息的交换。 客户端连接的建立 Socket构造函数的调用与客户端连接建立时所关联的协议事件之间的关系下图所示: 当客户端以
阅读全文
posted @
2018-10-22 10:44
溪水静幽
阅读(984)
推荐(0) 编辑
深入剖析socket——TCP通信中由于底层队列填满而造成的死锁问题
摘要:提到了SendQ和RecvQ缓冲队列,这两个缓冲区的容量在具体实现时会受一定的限制,虽然它们使用的实际内存大小会动态地增长和收缩,但还是需要一个硬性的限制,以防止行为异常的程序所控制的单一TCP连接将系统的内存全部消耗。正式由于缓冲区的容量有限,它们可能会被填满,事实也正是如此,如果与TCP的流量控
阅读全文
posted @
2018-10-22 09:58
溪水静幽
阅读(627)
推荐(0) 编辑
深入剖析socket——数据传输的底层实现
摘要:套接字所关联的底层的数据结构集包含了特定Socket实例所关联的信息。套接字结构除其他信息外还包含: 1、该套接字所关联的本地和远程互联网地址和端口号。 2、一个FIFO(First Im First Out)队列,用于存放接收到的等待分配的数据,以及一个用于存放等待传输的数据的队列。 3、对于TC
阅读全文
posted @
2018-10-21 22:19
溪水静幽
阅读(524)
推荐(0) 编辑
构建和解析自定义协议消息
摘要:简单的投票协议:一个客户端向服务器发送一个请求消息,消息中包含了一个候选人的ID,范围在0~1000。 支持两种请求:一种是查询请求,即向服务器询问候选人当前获得的投票总数,服务器发回一个响应消息,包含了原来的候选人ID和该候选人当前获得的选票总数;另一种是投票请求,即向指定候选人投一票,服务器对这
阅读全文
posted @
2018-10-21 19:14
溪水静幽
阅读(374)
推荐(0) 编辑
应用程序协议中消息的成帧与解析
摘要:大部分应用程序协议是根据由字段序列组成的离散信息定义的,其中每个字段中都包含了一段以位序列编码(即二进制字节编码,也可以使用基于文本编码的方式,但常用协议如:TCP、UDP、HTTP等在传输数据时,都是以位序列编码的)的特定信息。应用程序协议中明确定义信息的发送者应该如何排列和解释这些位序列,同时还
阅读全文
posted @
2018-10-21 16:30
溪水静幽
阅读(300)
推荐(0) 编辑
UDP Socket
摘要:UDP协议提供的服务不同于TCP协议的端到端服务,是面向非连接的,属不可靠协议,UDP套接字在使用前不需要进行连接。实际上,UDP协议只实现了两个功能: 1)在IP协议的基础上添加端口; 2)对传输过程中可能产生的数据错误进行检测,并抛弃已经损坏的数据。 Java通过DatagramPacket类和
阅读全文
posted @
2018-10-21 15:43
溪水静幽
阅读(202)
推荐(0) 编辑
IO、NIO、AIO
摘要:同步和异步是针对应用程序和内核的交互而言的。 阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式 同步 指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪 异步 执行一个操作后,可以去执行其他的操作,然后等待通知再回来执行刚才没执行完的操作 阻塞 当试图对
阅读全文
posted @
2018-09-26 16:10
溪水静幽
阅读(293)
推荐(0) 编辑