对Netty和NIO的基础熟悉

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32447301/article/details/80686394

RPC:远程调用过程,通过网络远程计算机的进程某一个方法,从而获取想要的数据,过程也如同本地调用一样。
阻塞IO:当阻塞IO调用inputStream.read()方法是阻塞的,一直等到数据到来时才返回,同样ServerScoket.accpt()方法时,也是阻塞,直到客户端连接才返回。
这里写图片描述
缺点:当客户端多时,才创建大量的处理线程,并且每一个线程分配一定的资源;阻塞可能打来频繁切换上下文,引用NIO。
NIO:jdk1.4引入。基于通过和缓存区的IO方式,NIO是一种非阻塞IO的模型,通过不断轮询IO事件是否就绪,非阻塞是在指线程在等待IO的时候,可以做其他的任务,
同步的核心Selector,Selector代替线程本身的轮询IO事件。避免阻塞同时减少不想必要的线程消耗,非阻塞的核心是通道和缓存区,当IO事件的就绪是,可以缓冲区的数据写入通道。
这里写图片描述
其工作原理:
1.由专门的线程来处理所有的IO事件,并且负责转发
2.事件驱动机制:事件到的时候才触发,而不是同步监视
3.线程通讯:线程之间通讯通过wait,notify等方式通讯,保证每次上下文切换都是有意义的,减少没必要的线程切换
通道 : 是对原I/O包中流的模拟,所有数据必须通过Channel对象,常见的通道FileChannel,SocketChannel,ServerSocketChannel,DatagramChannel(UDP协议向网络连接的两端读写数据)
这里写图片描述
Buffer缓冲区:实际上是一个容器,一个连续的数组,任何读写的数据都经过Buffer。
这里写图片描述
Netty:是由JBOSS提供的一个java开源的框架,是一个高性能,异步事件驱动的NIO框架,基于JAVA的NIO提供的API
实现,他也提供TCP UDP和文件传输支持,所以操作都是一般非阻塞的通过Futrue——listener机制,本质就是Reactor模式的实现,Selector作为多路复用器,
EventLoop作为转发器,而且netty对NIO的buffer做优化,大大提高性能。

netty客服端与服务端
netty中bootstarp和Channel的生命周期
Bootstrap引导程序(而不是bootstrap前端页面框架)ChannelPipline,Channelhandler,EvengtLoop进行整体关联。

Bootstrap具体分为两个实现
ServerBootstrap:用于服务端,使用一个ServerChannel接收客户端的连接,并创建对应的子Channel
Bootstrap:用于客户端,只需要一个单独的Channel,配置整个Netty程序,串联起各个组件
二者的主要区别:
1. ServerBootstrap用于Server端,通过调用bind()绑定一个端口监听连接,Bootstrap用于Client端,需要调用connect()方法来连接服务器端,我们也可以调用bind()方法接收返回ChannelFuture中Channel
2. 客户端的Bootstrap一般用一个EventLoopGroup,而服务器的ServerBootstrap会用两个第一个EventLoopGroup专门负责绑定到端口监听连接事件,而第二个EventLoopGroup专门用来处处理每个接收的连接,这样大大提高了并发量

阅读更多

没有更多推荐了,返回首页