一、socket建立连接的过程
- 监听端口:(对应Nio中的EventLop)
(1)server在某一个端口上不断监听新用户的链接,调用accept()方法以阻塞的方式不断的监听新用户的链接
(2)不断去监听用户数据
2.新连接:在端口上监听到新连接,在I/O模型中是一个socket,在NIO中是一个SocketChannel,Netty统一将他们封装成一个自定义的channel。基于channel一系列的读写都可以在这条连接上进行操作,其实就是一个对socket的抽象。
3.接收数据:服务端接收数据流的载体都是基于byteBuffer,ByteBuffer提供了大量的API与底层连接的数据流进行通信。
4.业务逻辑:客户端与服务端进行通信的时候都会自定义二进制协议,要对二进制协议进行数据包的拆分,对于每一个不同类型的协议数据包都有不同的java对象,首先要把里面的字段读取出来然后转换成我们自定义的一个java对象,用java对象进行业务处理(这个过程在实际生产环境中非常复杂)。在Netty中,将每一个处理过程都当做ChannelHandler(比如将数据包进行拆分对应的概念就是数据包的分包器)
5.发送数据:服务端处理业务逻辑之后,将结果返回给客户端。整个执行流程与接收数据流程基本一致
二、socket与NIO组件对比图