nio
文章平均质量分 58
绝世好阿狸
这个作者很懒,什么都没留下…
展开
-
【网络IO模型(三)】Reactor 模式
/** * Reactor模式简述 * * Reactor负责轮询selector,将就绪事件分发给handler处理。 * handler大致有两种: * 1.acceptor:负责建连,建连后注册io handler; * 2.io handler:负责处理io读写事件; * * 所以Reactor模式是一种事件响应式模式。提前注册handler。selectionKey的作用是将handler与channel关联(注册事件时不能指定handler) * 当select返回就绪事.原创 2021-02-27 23:22:34 · 375 阅读 · 0 评论 -
【网络IO模型(一)】BIO vs NIO
先回顾下几个概念。阻塞 vs 非阻塞:指的是调用者线程会不会被阻塞。BIO就是一种阻塞io,如果没有就绪,调用者线程会被阻塞挂起。而NIO是非阻塞的。同步 vs 异步:指的是调用方式,同步调用可以理解为调用结果需要调用者主动获取,而异步调用则是使用回调/通知机制,将结果回调给调用者,调用者无需关心。可以看到,二者是两个维度的概念,没有绑定关系。同步调用可以是阻塞的也可以是非阻塞的,比如BIO和NIO。异步调用通常是非阻塞的,比如AIO。目前现状是BIO和NIO占绝大多数的场景,AIO却用的不原创 2021-02-27 15:13:23 · 233 阅读 · 1 评论 -
【Java】NIO ByteBuffer类使用
最近在看zookeeper的实现,所以必须先学会java nio,记录下。nio中有三个重要的概念,buffer,channel和selector。channel是连接对应于传统io的流,而buffer就是channel交换数据的地方。buffer有很多类型,每一个基本类型都有一个buffer,但是网络中用的最多的是ByteBuffer。我们通过channel向程序内读数据或者向程序外写数原创 2017-10-29 06:42:58 · 911 阅读 · 0 评论 -
【Java】NIO 客户端关闭
nio的客户端如果关闭了,服务端还是会收到该channel的读事件,但是数目为0,而且会读到-1,其实-1在网络io中就是socket关闭的含义,在文件时末尾的含义,所以为了避免客户端关闭服务端一直收到读事件,必须检测上一次的读是不是-1,如果是-1,就关闭这个channel。else if(key.isReadable()){ ByteBuffer buffer = ByteBu原创 2017-10-29 08:55:25 · 3131 阅读 · 3 评论 -
【Java】NIO 客户端-服务器 聊天 例子
想写一个简单的聊天C/S,client可以单聊和群发,代码里面有每一次发送的格式。发现没写过NIO还真不习惯这种模式,总体感觉是不管哪一端,最终都有一个select的循环,然后循环里面会对每一个就绪的key处理,key的处理又是一种宏观的写法,read或者write的处理会包括每一个通道的处理,所以这些函数可能会有很多的case,写起来还是挺费劲的。但是基本还是遵循了服务器的请求-相应模式。就原创 2017-10-30 05:19:08 · 508 阅读 · 0 评论 -
【Java】NIO 仿照zookeeper 写的 nio客户端
之前用nio写了一个聊天室的简单demo,发现思路很乱,然后就开始看zookeeper是怎么做的,发现思路很妙,于是就仿照着写了一个很简单的客户端版本,就是输入一个加法的字符串,然后让服务器计算,再返回。客户端:package client;import java.io.IOException;import java.net.InetSocketAddress;import jav原创 2017-10-30 12:11:50 · 459 阅读 · 0 评论