当前位置: 首页 > 网络应用技术

Netty源代码2通道和不安全

时间:2023-03-07 23:40:43 网络应用技术

  欢迎大家注意github.com/hsfxuebao。我希望这对每个人都会有所帮助。如果您认为有可能

  “ Netty权威指南”中使用的源代码是NetTy5,但Netty5已被放弃,因此本文通过参考Netty4.1的来源来解释。

  JDK NIO类库为非块I/O操作提供了Socketchannel和Serversocketchannel。与Nio Channel相似,Netty提供了自己的频道及其子类别实现。

  io.netty.channel.channel是网络操作摘要Netty类,它收敛一组功能,包括但不限于网络阅读和写作,客户端启动连接,连接的主动关闭,还包括与该功能有关的一些功能Netty框架,包括Netty框架,包括与Netty框架有关的功能,包括Netty框架,包括与Netty Framework有关的一些功能,包括Netty Framework,包括与Netty Framework相关的功能。缓冲区比字节线和管道。

  您是否想启动另一个炉灶,而不是Nio的本地频道?主要原因是:

  由于上述原因,Netty重新设计了该渠道,其主要设计概念如下:

  Netty的功能是什么?

  Nioserversocketchannel和Niosocketchannel具有继承的频道,AbstractChannel,AbstractNioChannel。

  主要成员变量如下:

  AbstractChannel中的网络I/O操作都是拨打管道的相应方法,然后呼叫ChannelHandler进行处理。

  主要成员变量是:

  AbstractNioChannel类中更重要的方法是Doregister,该方法负责将通道注册到多路复用固定器选择器。

  在Doregister方法中,OPS字段设置为0,对任何事件都不感兴趣。实际设置操作位置位于DoBeginream方法中,因此何时设置写作操作位置?当然,有数据要编写数据,缓冲区已满(或其他无法立即写入)。

  AbstractNiobyTechannel是Niosocketchannel的父类。只有一个会员变量flushtask,负责编写一半的新闻。

  主要方式是嫁妆:

  AbstractNiomessAgeChannel是Nioserversocketchannel,NiodatagramChannel的父类。主要方法也是嫁妆。该函数类似于Abstractniobytechannel的陶列。不同之处在于,后者仅处理bytebuf和filerergy。前者没有限制并处理所有对象。

  Dowritemessage方法在NioServersocketchannel中实现了以下内容,因为NioServersocketchannel仅用于监视端口,接收客户端请求,并且不负责传输实际数据。

  Dowritemessage方法是在NiosctpChannel中的特定实现中实现的。从代码可以看出,它仅处理SCTPMESSAGE类型的数据。

  Nioserversocketchannel是服务侧通道的实现类。有一个用于配置的TCP参数的ServersocketchannelConfig。

  作为服务器,核心方法是绑定dobind方法并创建socketchannel doreadmesges方法。

  对于与服务器通道无关的方法,有必要果断地抛出UndupportoperationException异常。

  Niosocketchannel是客户端唱片的实现类,仅用于配置参数的变量socketchannelconfig。

  客户端室的核心方法连接到doconnect,编写半包式嫁妆,读取运行的doreadbytes,让我们一一分析。

  连接操作DOCONECT实现如下:

  嫁妆的具体实现如下:

  阅读操作相对简单,主要是通过Bytebuf读取数据。

  通道系统的设计与其实现函数密不可分。在多级抽象类中,每个抽象级别都负责实现函数。

  当父类提供大型且全面的接口时,可以根据需要实现父类,如果您不需要,则可以抛出UnupportoperationException异常。

  不安全的接口实际上是通道接口的辅助接口。用户代码不应直接调用它。实际的I/O读取操作员由不安全的接口完成。

  Netty中的一个非常核心的组件封装了Java基础的插座操作,这是连接Netty和Java基础NIO的重要桥梁。

  ,告知ChannEnelturedisconnect(ChannelPromise Promise)void的连接。void发送消息,一旦完成,通知Channelflush()void void以将消息写入缓冲阵列中的消息()voidpromise()channelpromise()channel promise to to the void channelpromise返回到一个特殊的可重复使用的和传播的通道普罗米斯,它不用于操作成功或失败通知设备,就像一个容器一样,OutboundBuffer()chinderoutboundbuffer返回一条消息,发送缓冲区不安全的继承关系经典:

  源代码的一部分如下:

  nioeventloop,在读取方法的逻辑中,最终调用了各种ChannelHandler的设置

  通过频道的WriteAndFlush会议,链中的各种频道手将在管道呼叫链中调用链条(每个都以需要编写的数据的格式)。这里只是将数据写入字节buffer。通过调用flash方法不安全,数据最终可以写入网络,即上述分析过程。

  Netty学习和源代码分析GitHub地址

  从进入到熟练视频教程(B)的Netty

  Netty权威指南第二版

  Netty中的渠道和不安全来源的解释

  原始:https://juejin.cn/post/7097159257719734309