@UnstableApi public class Http2FrameCodec extends Http2ConnectionHandler
这个API非常不成熟。 基于Http2Connection的API目前优于此API。 该API旨在最终取代或减少对Http2ConnectionHandler
API的需求。
将HTTP / 2帧映射到Http2Frame
对象的HTTP / 2处理程序,反之亦然。 对于每个传入的HTTP / 2帧, 都会创建一个Http2Frame
对象并通过ByteToMessageDecoder.channelRead(io.netty.channel.ChannelHandlerContext, java.lang.Object)
传播。 通过write(io.netty.channel.ChannelHandlerContext, java.lang.Object, io.netty.channel.ChannelPromise)
收到的出站Http2Frame
对象将转换为HTTP / 2线格式。 特定于流的HTTP / 2帧实现Http2StreamFrame
接口。 Http2FrameCodec
使用Http2FrameCodecBuilder
实例化。 建议渠道处理程序从Http2ChannelDuplexHandler
继承,因为它提供了其他功能,例如遍历所有活动流或创建出站流。
RST_STREAM
帧或者双方都发送带有END_STREAM
标志设置的帧时,活动流将关闭。
每个Http2StreamFrame
都有一个Http2FrameStream
对象,用于唯一标识特定的流。
Http2StreamFrame
通常从通道读取Http2FrameStream
对象集,而在编写Http2StreamFrame
时 ,应用程序代码需要使用Http2StreamFrame.stream(Http2FrameStream)
设置Http2FrameStream
对象。
通过写入Http2WindowUpdateFrame
消耗的字节数和相应的流标识符设置为帧编解码器,需要消耗流入受控帧。
本地流级别流量控制窗口可通过编写一个Http2SettingsFrame
并将Http2Settings.initialWindowSize()
设置为目标值来更改。
连接级流量控制窗口可通过以Http2WindowUpdateFrame
写入所需的窗口大小增量(以字节为单位)并将流标识符设置为0
来0
。 默认情况下,初始连接级别流控制窗口与初始流级别流控制窗口相同。
Http2HeadersFrame
,它将连接Http2FrameStream
对象。
Http2ChannelDuplexHandler.newStream()
实例化新的Http2FrameStream
对象,然后用连接的流写入Http2HeadersFrame
对象。
final Http2Stream2 stream = handler.newStream();
ctx.write(headersFrame.stream(stream)).addListener(new ChannelFutureListener() {
ByteToMessageDecoder.Cumulator
ChannelHandler.Sharable
COMPOSITE_CUMULATOR, MERGE_CUMULATOR
Modifier and Type | Method and Description |
---|---|
void |
handlerAdded(ChannelHandlerContext ctx)
子类可以忽略这个方法。
|
protected boolean |
isGracefulShutdownComplete()
由优雅的关机逻辑调用以确定何时可以安全地关闭连接。
|
protected void |
onConnectionError(ChannelHandlerContext ctx, boolean outbound, java.lang.Throwable cause, Http2Exception http2Ex)
处理程序出现连接错误。
|
protected void |
onStreamError(ChannelHandlerContext ctx, boolean outbound, java.lang.Throwable cause, Http2Exception.StreamException streamException)
对于未知数据流的异常情况,即没有附加 Http2FrameStream 对象的数据流将被记录并通过发送RST_STREAM帧进行回复。
|
void |
userEventTriggered(ChannelHandlerContext ctx, java.lang.Object evt)
处理明文HTTP升级事件。
|
void |
write(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise)
处理所有 Http2Frame s。
|
bind, channelActive, channelInactive, channelReadComplete, channelWritabilityChanged, close, closeStream, closeStreamLocal, closeStreamRemote, connect, connection, decode, decoder, deregister, disconnect, encoder, exceptionCaught, flush, frameWriter, goAway, gracefulShutdownTimeoutMillis, gracefulShutdownTimeoutMillis, handlerRemoved0, handleServerHeaderDecodeSizeError, onError, onHttpClientUpgrade, onHttpServerUpgrade, read, resetStream
actualReadableBytes, callDecode, channelRead, decodeLast, discardSomeReadBytes, handlerRemoved, internalBuffer, isSingleDecode, setCumulator, setDiscardAfterReads, setSingleDecode
channelRegistered, channelUnregistered
ensureNotSharable, isSharable
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
handlerRemoved
public final void handlerAdded(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelHandlerAdapter
handlerAdded
,界面
ChannelHandler
handlerAdded
Http2ConnectionHandler
java.lang.Exception
public final void userEventTriggered(ChannelHandlerContext ctx, java.lang.Object evt) throws java.lang.Exception
userEventTriggered
在界面
ChannelInboundHandler
userEventTriggered
在课堂上
ByteToMessageDecoder
java.lang.Exception
public void write(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise)
Http2Frame
s。
Http2StreamFrame
s可能只起源于子流。
write
在界面
ChannelOutboundHandler
write
在课堂上
Http2ConnectionHandler
ctx
- 为其写入操作的ChannelHandlerContext
msg
- 写信息
promise
- 在操作完成后通知ChannelPromise
protected void onConnectionError(ChannelHandlerContext ctx, boolean outbound, java.lang.Throwable cause, Http2Exception http2Ex)
Http2ConnectionHandler
onConnectionError
在课堂上
Http2ConnectionHandler
ctx
- 频道上下文
outbound
-
true
如果错误是由出站操作引起的。
cause
- 被发现的例外情况
http2Ex
- 嵌入因果关系链中的Http2Exception
。
这可能是null
如果它是未知的例外。
protected final void onStreamError(ChannelHandlerContext ctx, boolean outbound, java.lang.Throwable cause, Http2Exception.StreamException streamException)
Http2FrameStream
对象的数据流将被记录并通过发送RST_STREAM帧进行回复。
onStreamError
在课堂上
Http2ConnectionHandler
ctx
- 频道上下文
outbound
-
true
如果错误是由出站操作引起的。
cause
- 被捕的异常
streamException
- 嵌入因果关系链中的Http2Exception.StreamException
。
protected final boolean isGracefulShutdownComplete()
Http2ConnectionHandler
true
。
这个实现只保证没有活动流。
子类可能会覆盖以提供额外的检查。
Copyright © 2008–2018 The Netty Project. All rights reserved.