美文网首页Java学习笔记Java 杂谈Spring-Boot
来自灵魂深处的拷问:Netty底层细节,原理理解你还能Hold住

来自灵魂深处的拷问:Netty底层细节,原理理解你还能Hold住

作者: 该用户已秃头 | 来源:发表于2020-04-24 18:54 被阅读0次

    前言

    Netty是一个高性能、异步事件驱动的NIO框架,提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。

    作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于Netty构建,比如RPC框架、zookeeper等。

    Netty到底是什么

    要从HTTP说起

    有了Netty,你可以实现自己的HTTP服务器,FTP服务器,UDP服务器,RPC服务器,WebSocket服务器,Redis的Proxy服务器,MySQL的Proxy服务器等等。

    我们回顾一下传统的HTTP服务器的原理

    1、创建一个ServerSocket,监听并绑定一个端口

    2、一系列客户端来请求这个端口

    3、服务器使用Accept,获得一个来自客户端的Socket连接对象

    4、启动一个新线程处理连接

    4.1、读Socket,得到字节流

    4.2、解码协议,得到Http请求对象

    4.3、处理Http请求,得到一个结果,封装成一个HttpResponse对象

    4.4、编码协议,将结果序列化字节流 写Socket,将字节流发给客户端

    5、继续循环步骤3

    HTTP服务器之所以称为HTTP服务器,是因为编码解码协议是HTTP协议,如果协议是Redis协议,那它就成了Redis服务器,如果协议是WebSocket,那它就成了WebSocket服务器,等等。 使用Netty你就可以定制编解码协议,实现自己的特定协议的服务器。

    NIO

    上面是一个传统处理http的服务器,但是在高并发的环境下,线程数量会比较多,System load也会比较高,于是就有了NIO。

    他并不是Java独有的概念,NIO代表的一个词汇叫着IO多路复用。它是由操作系统提供的系统调用,早期这个操作系统调用的名字是select,但是性能低下,后来渐渐演化成了Linux下的epoll和Mac里的kqueue。我们一般就说是epoll,因为没有人拿苹果电脑作为服务器使用对外提供服务。而Netty就是基于Java NIO技术封装的一套框架。为什么要封装,因为原生的Java NIO使用起来没那么方便,而且还有臭名昭著的bug,Netty把它封装之后,提供了一个易于操作的使用模式和接口,用户使用起来也就便捷多了。

    说NIO之前先说一下BIO(Blocking IO),如何理解这个Blocking呢?

    客户端监听(Listen)时,Accept是阻塞的,只有新连接来了,Accept才会返回,主线程才能继

    读写socket时,Read是阻塞的,只有请求消息来了,Read才能返回,子线程才能继续处理

    读写socket时,Write是阻塞的,只有客户端把消息收了,Write才能返回,子线程才能继续读取下一个请求

    传统的BIO模式下,从头到尾的所有线程都是阻塞的,这些线程就干等着,占用系统的资源,什么事也不干。

    那么NIO是怎么做到非阻塞的呢。它用的是事件机制。它可以用一个线程把Accept,读写操作,请求处理的逻辑全干了。如果什么事都没得做,它也不会死循环,它会将线程休眠起来,直到下一个事件来了再继续干活,这样的一个线程称之为NIO线程。

    Netty预习资料:网络高并发负载均衡

    有需要的朋友可以帮忙转发文章后,关注私信回复【学习】来免费获取

    来自灵魂深处的拷问:面试能Hold住框架的表层概念,但是底层细节,原理理解还能Hold住吗?

    划重点!!看过来~

    【Netty底层】训练营!

    开营时间:4月25/26日晚20.00

    实训营第一天:

    操作系统中的BIO/NIO/SELECT/POLL/EPOLL实现

    JDK中的NIO是什么

    什么是selector、bytebuffer、channel

    netty的reactor模型原理

    实训营第二天:

    netty中使用了那些"NIO"

    Eventloopgroup、pipeline、handler是啥

    netty如何解决粘包拆包

    如何参加训练营?

    帮忙转发文章后,关注私信回复【训练营】即可

    相关文章

      网友评论

        本文标题:来自灵魂深处的拷问:Netty底层细节,原理理解你还能Hold住

        本文链接:https://www.haomeiwen.com/subject/grlqwhtx.html