public abstract class AbstractTrafficShapingHandler extends ChannelDuplexHandler
AbstractTrafficShapingHandler允许将全局带宽(请参阅GlobalTrafficShapingHandler
)或每个会话带宽(请参阅ChannelTrafficShapingHandler
)限制为流量整形。 它允许您使用来自TrafficCounter
的监视器实现对带宽的几乎实时监视,这些监视器将回调每个checkInterval方法执行此处理程序的计数。
如果您因任何特定原因需要停止监视(记帐)或更改读/写限制或检查间隔,可以使用以下几种方法:
ChannelHandler.Sharable
Modifier and Type | Field and Description |
---|---|
protected long |
checkInterval
两个性能快照之间的延迟
|
static long |
DEFAULT_CHECK_INTERVAL
两次检查之间的默认延迟:1秒
|
static long |
DEFAULT_MAX_TIME
流量整形时的默认最大延迟(在此期间不会发生通信)。
|
protected long |
maxTime
最大延迟等待
|
protected TrafficCounter |
trafficCounter
流量计数器
|
Modifier | Constructor and Description |
---|---|
protected |
AbstractTrafficShapingHandler()
|
protected |
AbstractTrafficShapingHandler(long checkInterval)
构造函数使用NO LIMIT,默认最大时间为延迟允许值
15000L ms。
|
protected |
AbstractTrafficShapingHandler(long writeLimit, long readLimit)
|
protected |
AbstractTrafficShapingHandler(long writeLimit, long readLimit, long checkInterval)
|
protected |
AbstractTrafficShapingHandler(long writeLimit, long readLimit, long checkInterval, long maxTime) |
Modifier and Type | Method and Description |
---|---|
protected long |
calculateSize(java.lang.Object msg)
计算给定的
Object 的大小。
|
void |
channelRead(ChannelHandlerContext ctx, java.lang.Object msg)
|
void |
channelRegistered(ChannelHandlerContext ctx)
|
void |
configure(long newCheckInterval)
更改检查间隔。
|
void |
configure(long newWriteLimit, long newReadLimit)
更改底层的限制。
|
void |
configure(long newWriteLimit, long newReadLimit, long newCheckInterval)
更改底层限制和检查时间间隔。
|
protected void |
doAccounting(TrafficCounter counter)
每次从TrafficCounters计算会计时调用。
|
long |
getCheckInterval() |
long |
getMaxTimeWait() |
long |
getMaxWriteDelay() |
long |
getMaxWriteSize() |
long |
getReadLimit() |
long |
getWriteLimit() |
protected static boolean |
isHandlerActive(ChannelHandlerContext ctx) |
void |
read(ChannelHandlerContext ctx)
|
void |
setCheckInterval(long checkInterval) |
void |
setMaxTimeWait(long maxTime)
请注意,更改将被视为尽力而为,这意味着所有已计划的流量都不会改变,但仅适用于新的流量。
|
void |
setMaxWriteDelay(long maxWriteDelay)
请注意,更改将被视为尽力而为,这意味着所有已计划的流量都不会改变,但仅适用于新的流量。
|
void |
setMaxWriteSize(long maxWriteSize)
请注意,此限制是防止内存不足异常的最佳内存限制。
|
void |
setReadLimit(long readLimit)
请注意,更改将被视为尽力而为,这意味着所有已计划的流量都不会改变,但仅适用于新的流量。
|
void |
setWriteLimit(long writeLimit)
请注意,更改将被视为尽力而为,这意味着所有已计划的流量都不会改变,但仅适用于新的流量。
|
protected void |
submitWrite(ChannelHandlerContext ctx, java.lang.Object msg, long delay, ChannelPromise promise)
已过时。
|
java.lang.String |
toString() |
TrafficCounter |
trafficCounter() |
protected int |
userDefinedWritabilityIndex() |
void |
write(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise)
|
bind, close, connect, deregister, disconnect, flush
channelActive, channelInactive, channelReadComplete, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggered
ensureNotSharable, handlerAdded, handlerRemoved, isSharable
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
exceptionCaught, handlerAdded, handlerRemoved
public static final long DEFAULT_CHECK_INTERVAL
public static final long DEFAULT_MAX_TIME
protected TrafficCounter trafficCounter
protected volatile long maxTime
protected volatile long checkInterval
protected AbstractTrafficShapingHandler(long writeLimit, long readLimit, long checkInterval, long maxTime)
writeLimit
- 0或以字节/秒为单位的限制
readLimit
- 0或以字节/秒为单位的限制
checkInterval
- 通道两次性能计算之间的延迟,如果不计算统计信息,则延迟0。
maxTime
- maxTime
等待的最大延迟时间。
必须是积极的。
protected AbstractTrafficShapingHandler(long writeLimit, long readLimit, long checkInterval)
writeLimit
- 0或以字节/秒为单位的限制
readLimit
- 0或以字节/秒为单位的限制
checkInterval
- 通道两次性能计算之间的延迟,如果不计算统计数据,则延迟0。
protected AbstractTrafficShapingHandler(long writeLimit, long readLimit)
writeLimit
- 0或以字节/秒为单位的限制
readLimit
- 0或以字节/秒为单位的限制
protected AbstractTrafficShapingHandler()
protected AbstractTrafficShapingHandler(long checkInterval)
checkInterval
- 通道两次性能计算之间的延迟,如果不计算统计数据,则延迟0。
protected int userDefinedWritabilityIndex()
public void configure(long newWriteLimit, long newReadLimit, long newCheckInterval)
请注意,更改将被视为尽力而为,这意味着所有已计划的流量都不会改变,但仅适用于新的流量。
所以这种方法的预期用法不是太频繁地使用,因此对于流量整形配置。
newWriteLimit
- 新的写入限制(以字节为单位)
newReadLimit
- 新的读取限制(以字节为单位)
newCheckInterval
- 新的检查间隔(以毫秒为单位)
public void configure(long newWriteLimit, long newReadLimit)
请注意,更改将被视为尽力而为,这意味着所有已计划的流量都不会改变,但仅适用于新的流量。
所以这种方法的预期用法不是太频繁地使用,因此对于流量整形配置。
newWriteLimit
- 新的写入限制(以字节为单位)
newReadLimit
- 新的读取限制(以字节为单位)
public void configure(long newCheckInterval)
newCheckInterval
- 新的检查间隔(以毫秒为单位)
public long getWriteLimit()
public void setWriteLimit(long writeLimit)
请注意,更改将被视为尽力而为,这意味着所有已计划的流量都不会改变,但仅适用于新的流量。
所以这种方法的预期用法不是太频繁地使用,因此对于流量整形配置。
writeLimit
- 要设置的writeLimit
public long getReadLimit()
public void setReadLimit(long readLimit)
请注意,更改将被视为尽力而为,这意味着所有已计划的流量都不会改变,但仅适用于新的流量。
所以这种方法的预期用法不是太频繁地使用,因此对于流量整形配置。
readLimit
- 要设置的readLimit
public long getCheckInterval()
public void setCheckInterval(long checkInterval)
checkInterval
- 每个步骤之间的间隔以毫秒为单位选中要设置的值,默认值为1000毫秒。
public void setMaxTimeWait(long maxTime)
请注意,更改将被视为尽力而为,这意味着所有已计划的流量都不会改变,但仅适用于新的流量。
所以这种方法的预期用法不是太频繁地使用,因此对于流量整形配置。
maxTime
- 等待中的最大延迟应小于相关协议中的TIME OUT。
必须是积极的。
public long getMaxTimeWait()
public long getMaxWriteDelay()
public void setMaxWriteDelay(long maxWriteDelay)
请注意,更改将被视为尽力而为,这意味着所有已计划的流量都不会改变,但仅适用于新的流量。
所以这种方法的预期用法不是太频繁地使用,因此对于流量整形配置。
maxWriteDelay
- 设置写入暂停之前允许的缓冲区中的最大写入延迟(以毫秒为单位)。
必须是积极的。
public long getMaxWriteSize()
public void setMaxWriteSize(long maxWriteSize)
请注意,此限制是防止内存不足异常的最佳内存限制。 为了确保它的正常工作,生成写入的处理程序应该使用Netty提供的一种方式来处理容量:
- Channel.isWritable()
财产和相应的channelWritabilityChanged()
- ChannelFuture.addListener(new GenericFutureListener())
maxWriteSize
- 设置写入挂起前每个通道缓冲区中允许的最大写入大小,默认值为字节。
protected void doAccounting(TrafficCounter counter)
counter
- 计算其性能的
counter
public void channelRead(ChannelHandlerContext ctx, java.lang.Object msg) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelRead(Object)
转发到ChannelPipeline
中的下一个ChannelInboundHandler
。
子类可以重写此方法来更改行为。
channelRead
在界面
ChannelInboundHandler
channelRead
在课堂上
ChannelInboundHandlerAdapter
java.lang.Exception
protected static boolean isHandlerActive(ChannelHandlerContext ctx)
public void read(ChannelHandlerContext ctx)
ChannelDuplexHandler
ChannelHandlerContext.read()
转发到ChannelPipeline
中的下一个ChannelOutboundHandler
。
子类可以重写此方法来更改行为。
read
在界面
ChannelOutboundHandler
read
在课堂上
ChannelDuplexHandler
public void write(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise) throws java.lang.Exception
ChannelDuplexHandler
ChannelOutboundInvoker.write(Object, ChannelPromise)
转发到ChannelPipeline
中的下一个ChannelOutboundHandler
。
子类可以重写此方法来更改行为。
write
,界面
ChannelOutboundHandler
write
在课堂上
ChannelDuplexHandler
ctx
- 写入操作的ChannelHandlerContext
msg
- 写信息
promise
- 在操作完成后通知ChannelPromise
java.lang.Exception
- 发生错误时抛出
@Deprecated protected void submitWrite(ChannelHandlerContext ctx, java.lang.Object msg, long delay, ChannelPromise promise)
public void channelRegistered(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelRegistered()
转发到ChannelPipeline
中的下一个ChannelInboundHandler
。
子类可以重写此方法来更改行为。
channelRegistered
在界面
ChannelInboundHandler
channelRegistered
在课堂上
ChannelInboundHandlerAdapter
java.lang.Exception
public TrafficCounter trafficCounter()
public java.lang.String toString()
toString
在课堂上
java.lang.Object
protected long calculateSize(java.lang.Object msg)
msg
- 应该计算大小的信息。
-1
如果未知。
Copyright © 2008–2018 The Netty Project. All rights reserved.