NIO非阻塞式I/O模型
2023-08-28 22:25:13 2 举报
NIO非阻塞式I/O模型
作者其他创作
大纲/内容
注册读事件Selector
注册接受连接事件Selector
While
获取并处理消息
ByteBuffer buffer = ByteBuffer.allocate(1024)
与服务器建立连接
客户端
为什么要切换?因为buffer刚刚写入数据指针指向末尾,接下来要读数据,需要将指针拨到初始位置
int readBytes = sc.read(buffer)
创建缓冲区
创建SocketChannel
获取发生的事件集合
sc.register
绑定端口
true
读事件
sc.write(buffer)
buffer.flip()
socketChannel.register
socketChannel = SocketChannel.open()
serverSocketChannel.socket().bind
从channel中读数据写入buffer
关闭channel
设置非阻塞模式
注册读事件
SocketChannel sc = ssc.accept()
创建ServerSocketChannel
socketChannel.connect
ByteBuffer buffer = ByteBuffer.allocate(1024)
切换读模式
启动
serverSocketChannel = ServerSocketChannel.open()
ByteBuffer buffer = ByteBuffer.allocate(bytes.length)
false
serverSocketChannel.configureBlocking(false)
初始化
readBytes < 0
sc.finishConnect()
buffer.put
接受新的连接
socketChannel.configureBlocking(false)
serverSocketChannel.register
写入buffer
注册连接事件
连接事件
判断是否完成连接
readBytes < 0
selector.select(1000)
服务端
给客户端发送应答
缓冲区的初始状态是写模式
socketChannel配置的非阻塞,所以连接方法可能返回两种结果,一是期间已经完成连接建立,二是还没有建立完
0 条评论
下一页