java之nio(1)
来源:互联网 发布:网络销售酒 编辑:程序博客网 时间:2024/06/15 10:04
nio服务端时序流程
大概步骤如下:
1.打开ServerSocketChannel,用于监听客户端的链接,它是所有客户端连接的父管道;
2.绑定监听端口,设置为非阻塞模式;
3.创建Reactor线程,创建多路复用器并启动线程;
4.将ServerSocketChannel注册到Reactor线程的多路复用器Selector上,监听ACCEPT事件;
5.多路复用器在线程run方法的无限循环体内轮询准备就绪的Key;
6.多路复用器监听到有新的客户端接入,处理新的接入请求,完成TCP三次握手,建立物理链路;
7.设置客户端链路为非阻塞模式;
8.将新接入的客户端连接注册到Reactor线程的多路复用器上,继续监听读操作,读取客户端发送的网络请求;
9.异步读取客户端请求消息到缓冲区;
10.对ByteBuffer进行编码,如果有半包消息指针reset,继续读取后续的报文,将编码成功的消息封装成Task,投递到业务线程池中,进行业务逻辑编排;
11.讲POJO对象encode成ByteBuffer,调用SocketChannel的异步write接口,将消息异步发送给客户端。
nio客户端时序图
1.打开Socketchannel,绑定客户端本地地址(可选,默认系统会随机分配一个可用的本地地址);
2.设置SocketChannel为非阻塞模式,同时设置客户端连接的TCP参数;
3.异步连接服务端;
4.判断连接是否成功,如果连接成功,则直接注册读状态位到多路复用器中,如没当前没有连接成功(异步连接,返回false,说明客户端已经发送sync包,服务端没有返回ack包,物理链路还没有建立);
5.向Reactor线程的多路复用器注册OP_CONNECT状态位,监听TCP ACK应答;
6.创建Reactor线程,创建多路复用器并启动线程;
7.多路复用器在线程run方法的无限循环体内轮询准备就绪的Key;
8.接收connect事件进行处理;
9.判断连接结果,如果连接成功,注册读事件到多路复用器;
10.注册读事件到多路复用器;
11.异步读取客户端请求到缓冲区;
12.对Bytebuff进行编解码,如果有半包消息接收缓冲区Reset,继续读取后续的报文,将编码成功的消息封装成Task,投递到业务线程池中,进行业务逻辑编排;
13.将POJO对象encode成ByteBuffer,调用SockeChannel的异步write接口,将消息异步发送给客户端;
- java之nio(1)
- [NIO日记](1)Java NIO概述
- Java NIO 之 NIO 简介
- Java NIO之 Java NIO Overview(译)
- Java NIO(1)
- Java NIO(1)
- Java NIO使用及原理之--缓冲器buffer(1)
- Java - NIO之Channel(FileChannel)
- Java - NIO之Buffer(上)
- Java - NIO之Buffer(下)
- java学习之NIO(转)
- JAVA NIO之Buffer(一)
- java之非阻塞IO(NIO)
- Java NIO之通道(Channle)
- java网络编程之NIO(二)
- java nio之Buffer
- java nio 之MappedByteBuffer
- java nio 之MappedByteBuffer
- Spring 动态注入javaBean
- 抓包分析connect函数
- Symbol_stdout multiply defined (by stdio_stream.o and usart.o )
- [笔记分享] [Exception] 内核空间异常之流程小结
- linux c vlan tag 技术详解
- java之nio(1)
- 一台机器上启动两个tomcat端口号冲突问题
- 工作中遇到的Hibernate的问题(HQL查询,非SQL)
- Javascript 难点易错点总结(二)
- 算法分析与设计——LeetCode:2.Add Two Numbers
- Android异步消息处理机制
- http://blog.csdn.net/appleml/article/details/51245454
- Kotlin从入门到放弃之准备篇——基本语法
- 互联网技术变革了农业生产,创造模式的新价值