Netty框架

简介

       Netty是一个事件驱动,异步的NIO框架,基于JAVA NIO提供的API实现。它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Reactor(Event-Async)模式,用户可以方便的主动获取或者通过通知机制获得IO操作结果。 作为当前最流行的NIO框架,Netty在double,elasticsearch,RocketMQ等开源框架中也有应用。

Reactor

       Reactor其实就是Event(事件驱动)和 RequestHander(接收输入源请求) 和 ServerHander(处理请求),RequestHander也就是NIO中的Selector,由 RequestHander 接收输入源请求后转发给 ServerHander,整个过程由事件驱动的设计模式。
       Netty在封装NIO时采用Reactor模式,netty有两个EventLoopGroup,主Group充当Selector,负责监听各channel,接收到请求后转发给从Group,然后由从Group处理请求,Group内置线程池以实现NIO的异步,通过 ChannelPipeline 生成基于事件的调用链。当然,可根据实际情况在从Group的处理过程中添加异步compute的机制。
在这里插入图片描述

Buffer

拆包/粘包

  • Tcp是个”流“协议,所谓流,就是没有界限的一串数据。一个完整的包,可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。
  • 解决:
    1. 消息定长。协议体分为定长消息和不定长消息两部分,传输的不定长消息的长度作为定长消息的一部分。
    2. 包尾添加特殊分隔符,例如每条报文结束都添加回车换行符(例如FTP协议)或者指定特殊字符作为报文分隔符,接收方通过特殊分隔符切分报文区分。

零拷贝

  • 合并buffer: 可以将多个ByteBuf 合并为一个逻辑上的 ByteBuf, 避免了各个 ByteBuf 之间的拷贝
  • 文件write不再循环: 通过 FileRegion 包装的FileChannel.tranferTo 实现文件传输, 可以直接将文件缓冲区的数据发送到目标 Channel, 避免了传统通过循环 write 方式导致的内存拷贝问题.

断连机制

       自动断连或者心跳断连选其一即可,自动断连是当前channel超过规定时间没有读写则断连,心跳断连是当前channel定时向连接方发送请求,超过规定时间没有回应则断连

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Netty框架的基本构造是ChannelHandler和Future。ChannelHandler是Netty提供的抽象,用于处理入站和出站事件。它是实现高性能网络应用程序的关键要素,Netty框架提供了大量开箱即用的ChannelHandler,如Http、SSL/TLS等。 同时,Future也是Netty框架的关键构件之一,它与ChannelHandler相互补充。Future用于异步执行操作,并返回操作的结果或状态。通过Future,我们可以实现非阻塞的网络通信,提高系统的并发性能和响应速度。 总之,Netty框架基于ChannelHandler和Future这两个关键构件,提供了高性能的网络应用程序框架,同时实现了分布式应用程序之间的通信。在实际使用中,可以通过使用Netty的各种ChannelHandler和Future来构建和扩展自己的网络应用程序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Netty框架](https://blog.csdn.net/xing_jian1/article/details/128319462)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [dubbo协议、netty框架总结](https://download.csdn.net/download/qq_40585384/87996544)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值