@UnstableApi public class Http2ConnectionHandler extends ByteToMessageDecoder implements Http2LifecycleManager, ChannelOutboundHandler
Http2FrameListener
该类将读取HTTP / 2帧并将事件委托给Http2FrameListener
此接口通过Http2LocalFlowController
强制执行入站流量控制功能
ByteToMessageDecoder.Cumulator
ChannelHandler.Sharable
COMPOSITE_CUMULATOR, MERGE_CUMULATOR
Modifier | Constructor and Description |
---|---|
protected |
Http2ConnectionHandler(Http2ConnectionDecoder decoder, Http2ConnectionEncoder encoder, Http2Settings initialSettings) |
Modifier and Type | Method and Description |
---|---|
void |
bind(ChannelHandlerContext ctx, java.net.SocketAddress localAddress, ChannelPromise promise)
调用一次绑定操作。
|
void |
channelActive(ChannelHandlerContext ctx)
|
void |
channelInactive(ChannelHandlerContext ctx)
|
void |
channelReadComplete(ChannelHandlerContext ctx)
|
void |
channelWritabilityChanged(ChannelHandlerContext ctx)
|
void |
close(ChannelHandlerContext ctx, ChannelPromise promise)
一旦进行了密切的操作,就会被调用。
|
void |
closeStream(Http2Stream stream, ChannelFuture future)
关闭并停用给定的
stream 。
|
void |
closeStreamLocal(Http2Stream stream, ChannelFuture future)
关闭给定流的本地侧。
|
void |
closeStreamRemote(Http2Stream stream, ChannelFuture future)
关闭给定流的远程端。
|
void |
connect(ChannelHandlerContext ctx, java.net.SocketAddress remoteAddress, java.net.SocketAddress localAddress, ChannelPromise promise)
连接操作完成后调用。
|
Http2Connection |
connection() |
protected void |
decode(ChannelHandlerContext ctx, ByteBuf in, java.util.List<java.lang.Object> out)
解码从一个 ByteBuf 到另一个。
|
Http2ConnectionDecoder |
decoder() |
void |
deregister(ChannelHandlerContext ctx, ChannelPromise promise)
一旦从当前注册的 EventLoop 进行撤销注册操作,就会被调用。
|
void |
disconnect(ChannelHandlerContext ctx, ChannelPromise promise)
调用一次断开操作。
|
Http2ConnectionEncoder |
encoder() |
void |
exceptionCaught(ChannelHandlerContext ctx, java.lang.Throwable cause)
处理从其他处理程序抛出的对象 Http2Exception 。
|
void |
flush(ChannelHandlerContext ctx)
调用一次冲洗操作。
|
protected Http2FrameWriter |
frameWriter() |
ChannelFuture |
goAway(ChannelHandlerContext ctx, int lastStreamId, long errorCode, ByteBuf debugData, ChannelPromise promise)
如果
errorCode 不是
Http2Error.NO_ERROR ,则阻止对等体创建流并关闭连接。
|
long |
gracefulShutdownTimeoutMillis()
获取在正常关闭过程中关闭连接之前,此端点将等待所有流关闭的时间量(以毫秒为单位)。
|
void |
gracefulShutdownTimeoutMillis(long gracefulShutdownTimeoutMillis)
设置此端点在正常关闭过程中关闭连接之前将等待所有流关闭的时间量(以毫秒为单位)。
|
void |
handlerAdded(ChannelHandlerContext ctx)
子类可以忽略这个方法。
|
protected void |
handlerRemoved0(ChannelHandlerContext ctx)
在 ByteToMessageDecoder 已从实际上下文中移除后调用,它不再处理事件。
|
protected void |
handleServerHeaderDecodeSizeError(ChannelHandlerContext ctx, Http2Stream stream)
通知客户端此服务器已收到比它愿意接受的头大的头。
|
protected boolean |
isGracefulShutdownComplete()
由优雅的关机逻辑调用以确定何时可以安全地关闭连接。
|
protected void |
onConnectionError(ChannelHandlerContext ctx, boolean outbound, java.lang.Throwable cause, Http2Exception http2Ex)
处理程序出现连接错误。
|
void |
onError(ChannelHandlerContext ctx, boolean outbound, java.lang.Throwable cause)
HTTP / 2处理期间捕获的所有异常的中央处理程序。
|
void |
onHttpClientUpgrade()
将客户端(明文)从HTTP升级到HTTP / 2。
|
void |
onHttpServerUpgrade(Http2Settings settings)
将服务器端(明文)从HTTP升级到HTTP / 2。
|
protected void |
onStreamError(ChannelHandlerContext ctx, boolean outbound, java.lang.Throwable cause, Http2Exception.StreamException http2Ex)
处理程序的流错误。
|
void |
read(ChannelHandlerContext ctx)
|
ChannelFuture |
resetStream(ChannelHandlerContext ctx, int streamId, long errorCode, ChannelPromise promise)
确保重置由
streamId 标识的流。
|
void |
write(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise)
一旦写入操作被调用,就调用它。
|
actualReadableBytes, callDecode, channelRead, decodeLast, discardSomeReadBytes, handlerRemoved, internalBuffer, isSingleDecode, setCumulator, setDiscardAfterReads, setSingleDecode, userEventTriggered
channelRegistered, channelUnregistered
ensureNotSharable, isSharable
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
handlerRemoved
protected Http2ConnectionHandler(Http2ConnectionDecoder decoder, Http2ConnectionEncoder encoder, Http2Settings initialSettings)
public long gracefulShutdownTimeoutMillis()
public void gracefulShutdownTimeoutMillis(long gracefulShutdownTimeoutMillis)
gracefulShutdownTimeoutMillis
- 在正常关闭过程中关闭连接之前,此端点将等待所有流关闭的时间量(以毫秒为单位)。
public Http2Connection connection()
public Http2ConnectionDecoder decoder()
public Http2ConnectionEncoder encoder()
public void onHttpClientUpgrade() throws Http2Exception
public void onHttpServerUpgrade(Http2Settings settings) throws Http2Exception
settings
- 远程端点的设置。
Http2Exception
public void flush(ChannelHandlerContext ctx)
ChannelOutboundHandler
复制的描述
flush
在界面
ChannelOutboundHandler
ctx
- 进行冲洗操作的ChannelHandlerContext
public void handlerAdded(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelHandlerAdapter
handlerAdded
在界面
ChannelHandler
handlerAdded
ChannelHandlerAdapter
java.lang.Exception
protected void handlerRemoved0(ChannelHandlerContext ctx) throws java.lang.Exception
ByteToMessageDecoder
ByteToMessageDecoder
已从实际上下文中移除之后调用,它不再处理事件。
handlerRemoved0
在课堂上
ByteToMessageDecoder
java.lang.Exception
public void channelActive(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelActive()
转发到ChannelPipeline
中的下一个ChannelInboundHandler
。
子类可以重写此方法来更改行为。
channelActive
,界面
ChannelInboundHandler
channelActive
在课堂上
ChannelInboundHandlerAdapter
java.lang.Exception
public void channelInactive(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelInactive()
转发到ChannelPipeline
中的下一个ChannelInboundHandler
。
子类可以重写此方法来更改行为。
channelInactive
在界面
ChannelInboundHandler
channelInactive
在课堂上
ByteToMessageDecoder
java.lang.Exception
public void channelWritabilityChanged(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelWritabilityChanged()
转发到ChannelPipeline
中的下一个ChannelInboundHandler
。
子类可以重写此方法来更改行为。
channelWritabilityChanged
在界面
ChannelInboundHandler
channelWritabilityChanged
ChannelInboundHandlerAdapter
java.lang.Exception
protected void decode(ChannelHandlerContext ctx, ByteBuf in, java.util.List<java.lang.Object> out) throws java.lang.Exception
ByteToMessageDecoder
decode
在课程
ByteToMessageDecoder
ctx
- 这ByteToMessageDecoder
所属的ChannelHandlerContext
in
- 从中读取数据的ByteBuf
out
- 应该添加解码消息的
List
java.lang.Exception
- 发生错误时抛出
public void bind(ChannelHandlerContext ctx, java.net.SocketAddress localAddress, ChannelPromise promise) throws java.lang.Exception
ChannelOutboundHandler
复制的描述
bind
在界面
ChannelOutboundHandler
ctx
- 为其进行绑定操作的ChannelHandlerContext
localAddress
- 它应该绑定的
SocketAddress
promise
- 在操作完成后通知ChannelPromise
java.lang.Exception
- 发生错误时抛出
public void connect(ChannelHandlerContext ctx, java.net.SocketAddress remoteAddress, java.net.SocketAddress localAddress, ChannelPromise promise) throws java.lang.Exception
ChannelOutboundHandler
connect
在界面
ChannelOutboundHandler
ctx
- 进行连接操作的ChannelHandlerContext
remoteAddress
- 它应该连接到的
SocketAddress
localAddress
- 用作连接源的
SocketAddress
promise
- 在操作完成后通知ChannelPromise
java.lang.Exception
- 发生错误时抛出
public void disconnect(ChannelHandlerContext ctx, ChannelPromise promise) throws java.lang.Exception
ChannelOutboundHandler
disconnect
,界面
ChannelOutboundHandler
ctx
- 为其进行断开操作的ChannelHandlerContext
promise
- 在操作完成后通知ChannelPromise
java.lang.Exception
- 发生错误时抛出
public void close(ChannelHandlerContext ctx, ChannelPromise promise) throws java.lang.Exception
ChannelOutboundHandler
close
在界面
ChannelOutboundHandler
ctx
- 关闭操作的ChannelHandlerContext
promise
- 在操作完成后通知ChannelPromise
java.lang.Exception
- 发生错误时抛出
public void deregister(ChannelHandlerContext ctx, ChannelPromise promise) throws java.lang.Exception
ChannelOutboundHandler
EventLoop
进行撤销注册操作,就会被调用。
deregister
在界面
ChannelOutboundHandler
ctx
- 关闭操作的ChannelHandlerContext
promise
- 在操作完成后通知ChannelPromise
java.lang.Exception
- 发生错误时抛出
public void read(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelOutboundHandler
read
在界面
ChannelOutboundHandler
java.lang.Exception
public void write(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise) throws java.lang.Exception
ChannelOutboundHandler
write
接口
ChannelOutboundHandler
ctx
- 为其写入操作的ChannelHandlerContext
msg
- 写信息
promise
- 在操作完成后通知ChannelPromise
java.lang.Exception
- 发生错误时抛出
public void channelReadComplete(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelReadComplete()
转发到ChannelPipeline
中的下一个ChannelInboundHandler
。
子类可以重写此方法来更改行为。
channelReadComplete
在界面
ChannelInboundHandler
channelReadComplete
在课堂
ByteToMessageDecoder
java.lang.Exception
public void exceptionCaught(ChannelHandlerContext ctx, java.lang.Throwable cause) throws java.lang.Exception
Http2Exception
。
忽略所有其他例外。
exceptionCaught
,界面
ChannelHandler
exceptionCaught
在界面
ChannelInboundHandler
exceptionCaught
在课堂
ChannelInboundHandlerAdapter
java.lang.Exception
public void closeStreamLocal(Http2Stream stream, ChannelFuture future)
closeStreamLocal
在界面
Http2LifecycleManager
stream
- 溪流半封闭。
future
- 如果关闭,未来之后关闭该频道。
public void closeStreamRemote(Http2Stream stream, ChannelFuture future)
closeStreamRemote
,界面
Http2LifecycleManager
stream
- 溪流半封闭。
future
- 如果关闭,未来之后关闭该频道。
public void closeStream(Http2Stream stream, ChannelFuture future)
Http2LifecycleManager
stream
。
收听者也附加到future
,完成后,如果Http2Connection.numActiveStreams()
为0,则基础频道将被关闭。
closeStream
在界面
Http2LifecycleManager
stream
- 要关闭和停用的流。
future
- 如果
Http2Connection.numActiveStreams()
为0,则完成后,底层渠道将被关闭。
public void onError(ChannelHandlerContext ctx, boolean outbound, java.lang.Throwable cause)
onError
,界面
Http2LifecycleManager
ctx
- 必要时用于通信和缓冲区分配的上下文。
outbound
- true
如果错误是由出站操作引起的,则相应的ChannelPromise
也失败。
cause
- 错误。
protected boolean isGracefulShutdownComplete()
true
。
这个实现只保证没有活动流。
子类可能会覆盖以提供额外的检查。
protected void onConnectionError(ChannelHandlerContext ctx, boolean outbound, java.lang.Throwable cause, Http2Exception http2Ex)
ctx
- 频道上下文
outbound
-
true
如果错误是由出站操作引起的。
cause
- 被捕获的异常
http2Ex
- 嵌入因果关系链中的Http2Exception
。
如果它是一个未知的异常,这可能是null
。
protected void onStreamError(ChannelHandlerContext ctx, boolean outbound, java.lang.Throwable cause, Http2Exception.StreamException http2Ex)
RST_STREAM
帧发送到远程端点并关闭流。
ctx
- 频道上下文
outbound
-
true
如果错误是由出站操作引起的。
cause
- 发现的异常
http2Ex
- 嵌入因果关系链中的Http2Exception.StreamException
。
protected void handleServerHeaderDecodeSizeError(ChannelHandlerContext ctx, Http2Stream stream)
ctx
- 频道上下文
stream
- 收到标头的Http2Stream
protected Http2FrameWriter frameWriter()
public ChannelFuture resetStream(ChannelHandlerContext ctx, int streamId, long errorCode, ChannelPromise promise)
Http2LifecycleManager
streamId
标识的流。
如果我们的本地状态没有显示流已经被重置,那么RST_STREAM
将被发送给对等体。
如果我们的本地状态指示流已经被重置,则返回状态将指示成功,而不向对等体发送任何东西。
resetStream
在界面
Http2LifecycleManager
ctx
- 必要时用于通信和缓冲区分配的上下文。
streamId
- 要重置的流的标识符。
errorCode
- 为什么此流正在重置的理由。
见Http2Error
。
promise
- 用于指示此操作的返回状态。
RST_STREAM
对等方发送了一个RST_STREAM
帧。
如果流状态已经更新和RST_STREAM
框架已发送,则返回的状态可能会立即表示成功。
public ChannelFuture goAway(ChannelHandlerContext ctx, int lastStreamId, long errorCode, ByteBuf debugData, ChannelPromise promise)
Http2LifecycleManager
errorCode
不是Http2Error.NO_ERROR
,则阻止对等体创建流并关闭连接。
在这次调用之后,对方不允许创建任何新的流,本地端点将被限制为使用stream identifier <= lastStreamId
创建流。
这可能会导致发送一个GO_AWAY
帧(假设我们还没有发送一个Last-Stream-ID <= lastStreamId
),或者如果先前发送了GO_AWAY
,可能会返回成功。
goAway
在界面
Http2LifecycleManager
ctx
- 必要时用于通信和缓冲区分配的上下文。
lastStreamId
- 本地端点声称它将接受的最后一个流。
errorCode
- 关于连接关闭的理由。
见Http2Error
。
debugData
- 用于诊断目的(不含语义值)。
promise
- 用于指示此操作的返回状态。
GO_AWAY
帧已经发送到对等体时将被认为是成功的。
如果流状态已经更新并且GO_AWAY
帧已经发送,则返回状态可以立即指示成功。
Copyright © 2008–2018 The Netty Project. All rights reserved.