netty是什么?
网络开发过程中(如上图),数据的传输分别需要经过网络五层。我们以Alluxio(一个开源的大数据加速项目)为例来进行说明:
Alluxio运行在应用层,当Alluxio客户端向Alluxio服务端请求数据的时候,请求端和响应端都会有一个应用层和传输层进行通信的过程,这里着重描述一下传输层的处理。
当第一次有客户端与Alluxio服务端进行通信的时候,Alluxio服务端会创建SeverSocketChannel来管理所有Alluxio客户端与Alluxio服务端之间的连接(每一个连接都会对应一个SocketChannel),这样每个Alluxio客户端都可以在Alluxio服务端有属于自己的数据通道。
在传输层有对应的处理客户端与服务端之间数据的传输通道,运行在应用层的服务需要相关的处理与传输层进行通信,从而将数据写到传输层(或从传输层读取数据)
传统的应用层处理数据的方式是以阻塞的形式进行的(如上图),性能非常低(当有大量的客户端连接过来时,服务端系统响应不过来)。
使用了选择器之后的非阻塞I/O(如上图),则可以在很少线程的情况下处理很多连接,减少了上下文切换所带来的性能开销。
netty中是如何管理数据通道的(如上图,每个channel代表一个socket连接,后面会具体介绍各个组件)。