zoukankan      html  css  js  c++  java
  • Netty的知识点集锦

    一.基础知识

    1.TCP和UDP的根本区别

    ● TCP面向连接,如打电话要先拨号建立连接;UDP是无连接的,即发送数据之前不需要建立连接。
    ● TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
    ● TCP通过校验和、重传控制、序号标识、滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
    ● UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高要求的通信或广播通信。

    ● 每一条TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的交互通信。

    ● TCP对系统资源要求较多;UDP对系统资源要求较少。

    2.TCP如何保证可靠传输

    TCP对发送的每一个包都进行编号,接收方对数据包进行排序,把有序数据传给应用层。
    ● 校验和:TCP将保持它首部和数据的校验和。这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到段的校验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。TCP的接收端会丢弃重复的数据。
    ● 流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。(TCP利用滑动窗口实现流量控制。)
    ● 拥塞控制:当网络拥塞时,减少数据的发送。
    ● 停止等待协议:也是为了实现可靠传输,它的基本原理就是每发完一个分组就停止发送,等待对方确认。收到确认后再发下一个分组。
    ● 超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

    3.Netty能解决什么问题

    Netty是一款基于NIO开发的网络通信框架,相比于BIO,它的并发性能得到了很大提高。难能可贵的是,在保证快速和易用性的同时,并没有丧失可维护性和性能等优势。

    阿里分布式服务框架Dubbo,默认使用Netty作为基础通信组件;还有RocketMQ,也是使用Netty作为通信的基础。

    4.Netty有哪些主要组件,它们之间的关系

    ● Channel:作为Netty中进行网络操作的抽象类,包括基本的I/O操作,如bind()、connect()、read()、write()等。
    ● EventLoop:主要是配合Channel处理I/O操作,用来处理连接的生命周期中所发生的事情。
    ● ChannelFuture:Netty框架中所有的I/O操作都是异步的,因此需要ChannelFuture的addListener()注册一个ChannelFutureListener监听事件,当操作执行成功或者失败时,监听就会自动触发返回结果。
    ● ChannelHandler:充当所有处理入栈和出栈数据的逻辑容器。ChannelHandler主要用来处理各种事件,这里的事件很广泛,比如连接、数据接收、异常、数据转换等。

    ● ChannelPipeline:为ChannelHandler链提供了容器,当Channel创建时,就会被自动分配到它专属的ChannelPipeline,这个关联是永久性的。

    二 高级特性

    1.Netty比起同类框架的优势

    ● 使用简单:封装了NIO的很多细节,使用更简单。
    ● 功能强大:预置了多种编解码功能,支持多种主流协议。
    ● 定制能力强:可以通过ChannelHandler对通信框架进行灵活的扩展。
    ● 性能高:通过与其他业界主流的NIO框架对比,Netty的综合性能最优。

    ● 稳定:Netty修复了已经发现的所有NIO的Bug,让开发者可以专注于业务本身。
    ● 社区活跃:Netty是活跃的开源项目,版本迭代周期短,Bug修复速度快。

    2.Netty的高性能都体现在哪里

    ● I/O线程模型:同步非阻塞,用最少的资源做更多的事。
    ● 内存零拷贝:尽量减少不必要的内存拷贝,实现更高效率的传输。
    ● 内存池设计:申请的内存可以重用,主要指直接内存。内部实现用一棵二叉查找树管理内存分配情况。
    ● 串行化处理读写:避免使用锁带来的性能开销。
    ● 高性能序列化协议:支持Protobuf等高性能序列化协议。


    3 默认情况下Netty起多少线程,何时启动
    Netty的线程数默认是CPU核数的两倍,Bind完之后启动。


    4. Netty有几种发送消息的方式
    Netty有两种发送消息的方式。
    ● 直接写入Channel,消息从ChannelPipeline中尾部开始传播。
    ●写入与ChannelHandler绑定的ChannelHandlerContext,消息从ChannelPipeline的下一个ChannelHandler中传播。

    5. Netty支持哪些心跳类型设置
    ● readerIdleTime:为读超时时间(即测试端一定时间内未接收到被测试端消息)。
    ● writerIdleTime:为写超时时间(即测试端一定时间内向被测试端发送消息)。
    ● allIdleTime:所有类型的超时时间。


    6. Netty和Tomcat的区别
    ● 作用不同:Tomcat是Servlet容器,可以视为Web服务器,而Netty是异步事件驱动的网络应用程序框架和工具,用于简化网络编程,例如TCP和UDP套接字服务器。

    ● 协议不同:Tomcat是基于HTTP的Web服务器,而Netty能通过编程自定义各种协议,因为Netty本身自己能编码/解码字节流,所以Netty可以实现HTTP服务器、FTP服务器、UDP服务器、RPC服务器、WebSocket服务器、Redis的Proxy服务器、MySQL的Proxy服务器等。

  • 相关阅读:
    python 中的[::-1]
    python 闭包
    elastic
    文件上传进度条修改
    python decorator的理解
    同方爬虫--面试题
    js typeof
    浅谈软件项目实施
    数独·唯一性技巧(Uniqueness)-1
    数独二
  • 原文地址:https://www.cnblogs.com/moonyaoo/p/12940784.html
Copyright © 2011-2022 走看看