I
- 涵盖开始消息和内容消息的类型
S
- 开始消息的类型
C
- 内容消息的类型(必须是ByteBufHolder
的子类型)
O
- 聚合消息的类型(必须是S
和ByteBufHolder
的子类型)
public abstract class MessageAggregator<I,S,C extends ByteBufHolder,O extends ByteBufHolder> extends MessageToMessageDecoder<I>
ChannelHandler
将一系列消息对象聚合为单个聚合消息。
“一系列消息”由以下内容组成:
isLastContentMessage(ByteBufHolder)
返回true
的内容消息,则聚合器将完成聚合并生成聚合消息并期望发送另一个启动消息。
ChannelHandler.Sharable
Modifier | Constructor and Description |
---|---|
protected |
MessageAggregator(int maxContentLength)
创建一个新的实例。
|
protected |
MessageAggregator(int maxContentLength, java.lang.Class<? extends I> inboundMessageType) |
Modifier and Type | Method and Description |
---|---|
boolean |
acceptInboundMessage(java.lang.Object msg)
如果应该处理给定的消息,则返回
true 。
|
protected void |
aggregate(O aggregated, C content)
将指定内容消息提供的信息传输到指定的聚合消息。
|
protected abstract O |
beginAggregation(S start, ByteBuf content)
根据指定的开始消息和指定的内容创建新的聚合消息。
|
void |
channelInactive(ChannelHandlerContext ctx)
|
void |
channelReadComplete(ChannelHandlerContext ctx)
|
protected abstract boolean |
closeAfterContinueResponse(java.lang.Object msg)
确定
newContinueResponse(Object, int, ChannelPipeline) 的结果写入后是否应关闭通道。
|
protected ChannelHandlerContext |
ctx() |
protected void |
decode(ChannelHandlerContext ctx, I msg, java.util.List<java.lang.Object> out)
从一条消息解码到另一条消息。
|
protected void |
finishAggregation(O aggregated)
当指定的
aggregated 消息即将传递给管道中的下一个处理程序时调用。
|
protected void |
handleOversizedMessage(ChannelHandlerContext ctx, S oversized)
当传入请求超过最大内容长度时调用。
|
void |
handlerAdded(ChannelHandlerContext ctx)
子类可以忽略这个方法。
|
void |
handlerRemoved(ChannelHandlerContext ctx)
子类可以忽略这个方法。
|
protected abstract boolean |
ignoreContentAfterContinueResponse(java.lang.Object msg)
确定当前请求/响应的所有对象是否应该被忽略。
|
protected abstract boolean |
isAggregated(I msg)
当且仅当指定的消息已经被聚合时才返回
true 。
|
protected abstract boolean |
isContentLengthInvalid(S start, int maxContentLength)
确定消息
start 的内容长度是否已知,并且是否大于
maxContentLength 。
|
protected abstract boolean |
isContentMessage(I msg)
当且仅当指定的消息是内容消息时才返回
true 。
|
boolean |
isHandlingOversizedMessage()
已过时。
将来的发行版中将删除此方法。
|
protected abstract boolean |
isLastContentMessage(C msg)
当且仅当指定的消息是最后一个内容消息时才返回
true 。
|
protected abstract boolean |
isStartMessage(I msg)
当且仅当指定的消息是开始消息时返回
true 。
|
int |
maxContentLength()
以字节为单位返回聚合消息的最大允许长度。
|
int |
maxCumulationBufferComponents()
返回累积缓冲区中的最大组件数。
|
protected abstract java.lang.Object |
newContinueResponse(S start, int maxContentLength, ChannelPipeline pipeline)
如有必要,返回指定开始消息的'continue response'。
|
void |
setMaxCumulationBufferComponents(int maxCumulationBufferComponents)
设置累积缓冲区中的最大组件数量。
|
channelRead
channelActive, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggered
ensureNotSharable, isSharable
protected MessageAggregator(int maxContentLength)
maxContentLength
- 聚合内容的最大长度。
如果聚合内容的长度超过此值,则会调用handleOversizedMessage(ChannelHandlerContext, Object)
。
protected MessageAggregator(int maxContentLength, java.lang.Class<? extends I> inboundMessageType)
public boolean acceptInboundMessage(java.lang.Object msg) throws java.lang.Exception
MessageToMessageDecoder
true
。
如果false
它将被传递到ChannelPipeline
中的下一个ChannelInboundHandler
。
acceptInboundMessage
在课程
MessageToMessageDecoder<I>
java.lang.Exception
protected abstract boolean isStartMessage(I msg) throws java.lang.Exception
true
。
通常情况下,此方法作为return
单个语句与instanceof
一起instanceof
:
return msg instanceof MyStartMessage;
java.lang.Exception
protected abstract boolean isContentMessage(I msg) throws java.lang.Exception
true
。
通常情况下,此方法是作为return
单个return
语句instanceof
:
return msg instanceof MyContentMessage;
java.lang.Exception
protected abstract boolean isLastContentMessage(C msg) throws java.lang.Exception
true
。
通常情况下,此方法是作为return
单个语句与instanceof
:
return msg instanceof MyLastContentMessage;
或用instanceof
和布尔型字段检查:
return msg instanceof MyContentMessage && msg.isLastFragment();
java.lang.Exception
protected abstract boolean isAggregated(I msg) throws java.lang.Exception
true
。
如果此方法返回true
,则此处理程序将仅将消息按true
转发给下一个处理程序。
java.lang.Exception
public final int maxContentLength()
public final int maxCumulationBufferComponents()
public final void setMaxCumulationBufferComponents(int maxCumulationBufferComponents)
2
。
@Deprecated public final boolean isHandlingOversizedMessage()
protected final ChannelHandlerContext ctx()
protected void decode(ChannelHandlerContext ctx, I msg, java.util.List<java.lang.Object> out) throws java.lang.Exception
MessageToMessageDecoder
decode
在课程
MessageToMessageDecoder<I>
ctx
- 这是MessageToMessageDecoder
所属的ChannelHandlerContext
msg
- 解码到另一个的消息
out
- 应该添加解码消息的
List
java.lang.Exception
- 如果发生错误则抛出
protected abstract boolean isContentLengthInvalid(S start, int maxContentLength) throws java.lang.Exception
start
的内容长度是否已知,以及是否大于
maxContentLength
。
start
- 可能指示内容长度的消息。
maxContentLength
- 允许的最大内容长度。
true
如果消息start
的内容长度已知,并且它大于maxContentLength
。
否则为false
。
java.lang.Exception
protected abstract java.lang.Object newContinueResponse(S start, int maxContentLength, ChannelPipeline pipeline) throws java.lang.Exception
null
如果没有消息要发送
java.lang.Exception
protected abstract boolean closeAfterContinueResponse(java.lang.Object msg) throws java.lang.Exception
newContinueResponse(Object, int, ChannelPipeline)
的结果写入后是否关闭通道。
msg
-从返回值
newContinueResponse(Object, int, ChannelPipeline)
。
true
如果在写入newContinueResponse(Object, int, ChannelPipeline)
的结果后应该关闭通道。
否则为false
。
java.lang.Exception
protected abstract boolean ignoreContentAfterContinueResponse(java.lang.Object msg) throws java.lang.Exception
isContentMessage(Object)
返回true
时,消息将不再被忽略。
msg
- 来自
newContinueResponse(Object, int, ChannelPipeline)
的返回值。
true
如果当前请求/响应的所有对象都应该被忽略。
否则为false
。
java.lang.Exception
protected abstract O beginAggregation(S start, ByteBuf content) throws java.lang.Exception
java.lang.Exception
protected void aggregate(O aggregated, C content) throws java.lang.Exception
aggregated
。
java.lang.Exception
protected void finishAggregation(O aggregated) throws java.lang.Exception
aggregated
消息即将传递给管道中的下一个处理程序时调用。
java.lang.Exception
protected void handleOversizedMessage(ChannelHandlerContext ctx, S oversized) throws java.lang.Exception
exceptionCaught()
事件与TooLongFrameException
。
ctx
- ChannelHandlerContext
oversized
-
oversized
累计的信息,其类型为
S
或
O
java.lang.Exception
public void channelReadComplete(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelReadComplete()
转发至ChannelInboundHandler
中的ChannelInboundHandler
。
子类可以重写此方法来更改行为。
channelReadComplete
在界面
ChannelInboundHandler
channelReadComplete
在课程
ChannelInboundHandlerAdapter
java.lang.Exception
public void channelInactive(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelInactive()
转发至ChannelPipeline
中的下一个ChannelInboundHandler
。
子类可以重写此方法来更改行为。
channelInactive
在界面
ChannelInboundHandler
channelInactive
在课程
ChannelInboundHandlerAdapter
java.lang.Exception
public void handlerAdded(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelHandlerAdapter
handlerAdded
在界面
ChannelHandler
handlerAdded
在课程
ChannelHandlerAdapter
java.lang.Exception
public void handlerRemoved(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelHandlerAdapter
handlerRemoved
,界面
ChannelHandler
handlerRemoved
在课程
ChannelHandlerAdapter
java.lang.Exception
Copyright © 2008–2018 The Netty Project. All rights reserved.