YaoCheng8667 的个人博客 YaoCheng8667 的个人博客

记录精彩的程序人生

目录
LIBQUIC Documentation翻译
/  

LIBQUIC Documentation翻译

1. QUIC Documentation

1.1 Classes

(1) QuicConnection

QuicConnection 类处理 QUIC 客户端或服务器的帧。它提供一个 SendStreamData 方法发送流数据,该方法主要被 QuicSession 类调用,它反过来调用 QuicPacketGenerator 类去生成 Quic 帧,同时实现了 QuicPacketGenerator::DelegateInterface 这一接口,并作为 QuicPacketGenerator 的一个委托,意思是 QuicPacketGenerator 接下来会调用 QuicConnection 的 OnSerializedPacket 方法。最后,Quic 帧被 QuicPacketWriter 调用 WritePacketInner 写入下层连接中。

(2) QuicSession

QuicSession 是一个是每个实际需要实现的 session 类的基类,它的主要功能是将每个到来的数据分配到正确的 Quic 流中去。它同时保持着每个 QuicConnection 的拥有权,QuicConnection 主要用于在实际信道上发送数据。因此,一个 QuicSession 就代表了一个 Quic 连接(相当于传统 TCP 协议的四元组) ,同时它可以包含很多条 Quic 流。每一条 Quic 流可以调用 WritevData 方法去发送数据。反之,QuicConnection 将会调用 QuicConnectionVisitorInterface 提供的接口去通知 Session 新的 Packet 到来以及连接改变的消息。

(3) ReliableQuicStream

ReliableQuicStream 类是每个 QUIC 流实现的基类。它定义了每个 Quic 流子类需要实现的接口。它同时实现了 Quic 流的一些基本逻辑例如流量控制,帧的序列,处理流的连接重置,关闭和写 buffer data 的操作。一个完整的 QUIC 流类只需要实现 ProcessRawData 和 EffectivePriority 方法。

(4) QuicDataStream

QuicDataStream 实现了一个 QUIC 流传输一个 SPDY 请求(谷歌定义的一个会话层协议)。它希望报文头部在链路中使用一个特定的流进行传输,该流由特定的会话进行控制。可以通过调用 OnStreamHeaders,OnStreamHeaderPriority 和 OnStreamHeaderComplete 方法将头部传输分配到特定的流。初始化时,它会阻塞 QuicStreamSequencer 直到所有的 Header 都被收到。

(5) QuicStreamSequencer

QuicStreamSequencer 维护了一个送往下层的帧缓冲区。其功能包括检查重复帧,帧的排序以及检查是否有发生错误。

(6) QuicPacketCreator

QuicPacketCreator 可以创建帧(frames)和报文(packets),它可以缓存帧或者将多个帧合并成更大的报文。

(7) QuicPacketGenerator

QuicPacketGenerator 被 QuicConnection 使用用来生成和发送报文。它使用 QuicPacketCreator 去生成报文,当报文准备好时,调用 OnSerializedPacket 将报文序列化。

(8) QuicFramer

QuicFramer 解析并创建 Quic 帧,它通过 ProcessPacket 方法接收数据,并调用 QuicFrameVisitorInterface 接口提供的方法通知 QuicConnection 一个新数据的到来。

(9) QuicHeadersStream

QuicHeadersStream 是 QuicDataConnection 用来使用单独的流来传输 SPDYHeader 的帧。

1.2 Interfaces

(1) QuicPacketWriter

QuicPacketWriter 定义了 QuicConnection 发送报文的方法。它还定义了一些判断 socket 是否阻塞的辅助方法。这些方法必须被使用 Quic 的应用所实现。

(2) QuicPacketGenerator::DelegateInterface

QuicPacketGenerator::DelegateInterface 定义了 QuicPacketGenerator 会调用的方法当新的报文可用时。它是被 QuicConnection 实现的。

(3) QuicFrameVisitorInterface

QuicFrameVistorInterface 定义了当创建一个新的 QuicPacket 的时候 QuicFramer 会调用的方法,它也是被 QuicConnection 实现的。

(4) QuicConnectionHelperInterface

QuicConnectionHelperInterface 定义了一些被 QuicConnection 调用的方法例如取得当前时钟,获取一些随机值以及设定定时器等。

(5) QuicConnectionVisitorInterface

QuicConnectionVisitorInterface 定义了一些被 QuicConnection 调用的方法当有帧到来或者一些其他有趣的事情发生时,它被 QuicSession 所实现。这个接口中的 OnStreamFrame 方法被用来处理连接到这个会话的流的帧。


标题:LIBQUIC Documentation翻译
作者:YaoCheng8667
地址:https://ycisme.xyz/articles/2020/01/16/1579155099587.html