@ChannelHandler.Sharable public class GlobalTrafficShapingHandler extends AbstractTrafficShapingHandler
AbstractTrafficShapingHandler
的这种实现方式适用于全局流量整形,也就是说无论打开的通道数量多少,都会对带宽造成全局性限制。
请注意, OutboundBuffer.setUserDefinedWritability(index, boolean)
使用的索引是2 。
一般用途应该如下:
创建您独特的GlobalTrafficShapingHandler,如:
GlobalTrafficShapingHandler myHandler = new GlobalTrafficShapingHandler(executor);
执行者可以是底层的IO工作者池
pipeline.addLast(myHandler);
请注意,此处理程序的管道覆盖范围为“全部”,这意味着只有一个此类处理程序必须在所有通道中创建和共享,因为计数器必须在所有通道之间共享。
其他参数可以像写入或读取限制(以字节/秒表示,其中0表示没有限制)或表示带宽的两次计算之间的延迟的检查间隔(以毫秒为单位)传递,因此doAccounting方法的回调(0意味着根本没有会计)。
值为0意味着不计入checkInterval。 如果您需要流量整形,但没有此类记帐,建议设置一个正值,即使该值较高,因为流量整形的精度取决于流量计算的时间段。 时间间隔越高,流量整形的精确度越低。 建议接近5或10分钟的值更高。
maxTimeToWait默认设置为15秒,允许指定时间整形的上限。
channel.isWritable()
和channelWritabilityChanged(ctx)
来处理可写性,或者通过future.addListener(new GenericFutureListener())
来处理由ctx.write()
返回的未来。 您还应该考虑在读取或写入操作时使用的对象大小与您所需的带宽相对匹配:例如,10KB / s的10 MB对象将导致突发效应,而1 MB / s的100 KB对象应该平滑由此TrafficShaping处理程序处理。
一些配置方法将被视为尽力而为,这意味着所有已安排的流量都不会改变,但仅适用于新的流量。
因此,这些方法的预期用途不会太频繁地使用,因此对流量整形配置也是如此。release()
来释放所有内部资源。
这不会关闭EventExecutor
,因为它可能是共享的,所以您需要自己做。
ChannelHandler.Sharable
checkInterval, DEFAULT_CHECK_INTERVAL, DEFAULT_MAX_TIME, maxTime, trafficCounter
Constructor and Description |
---|
GlobalTrafficShapingHandler(EventExecutor executor)
使用默认的“检查时间间隔”值1000毫秒和默认最大时间作为延迟允许值15000毫秒并且没有限制来创建一个新实例。
|
GlobalTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor, long checkInterval)
使用默认最大时间创建一个新实例作为15000毫秒的延迟允许值并且没有限制。
|
GlobalTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor, long writeLimit, long readLimit)
使用默认的“检查间隔”值1000毫秒和默认最大时间作为延迟允许值15000毫秒创建一个新实例。
|
GlobalTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor, long writeLimit, long readLimit, long checkInterval)
使用默认最大时间创建一个新实例,作为延迟允许值15000毫秒。
|
GlobalTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor, long writeLimit, long readLimit, long checkInterval, long maxTime)
创建一个新的实例。
|
Modifier and Type | Method and Description |
---|---|
long |
getMaxGlobalWriteSize() |
void |
handlerAdded(ChannelHandlerContext ctx)
子类可以忽略这个方法。
|
void |
handlerRemoved(ChannelHandlerContext ctx)
子类可以忽略这个方法。
|
long |
queuesSize() |
void |
release()
释放此实例的所有内部资源。
|
void |
setMaxGlobalWriteSize(long maxGlobalWriteSize)
请注意,更改将被视为尽力而为,这意味着所有已计划的流量都不会改变,但仅适用于新的流量。
|
protected int |
userDefinedWritabilityIndex() |
calculateSize, channelRead, channelRegistered, configure, configure, configure, doAccounting, getCheckInterval, getMaxTimeWait, getMaxWriteDelay, getMaxWriteSize, getReadLimit, getWriteLimit, isHandlerActive, read, setCheckInterval, setMaxTimeWait, setMaxWriteDelay, setMaxWriteSize, setReadLimit, setWriteLimit, submitWrite, toString, trafficCounter, write
bind, close, connect, deregister, disconnect, flush
channelActive, channelInactive, channelReadComplete, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggered
ensureNotSharable, isSharable
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
exceptionCaught
public GlobalTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor, long writeLimit, long readLimit, long checkInterval, long maxTime)
executor
- 用于ScheduledExecutorService
的ScheduledExecutorService 。
writeLimit
- 0或以字节/秒为单位的限制
readLimit
- 0或以字节/秒为单位的限制
checkInterval
- 通道两次性能计算之间的延迟,如果不计算统计数据,则延迟0。
maxTime
-
maxTime
等待的最大延迟时间。
public GlobalTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor, long writeLimit, long readLimit, long checkInterval)
executor
- 用于ScheduledExecutorService
的ScheduledExecutorService 。
writeLimit
- 0或以字节/秒为单位的限制
readLimit
- 0或以字节/秒为单位的限制
checkInterval
- 通道两次性能计算之间的延迟,如果不计算统计数据,则延迟0。
public GlobalTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor, long writeLimit, long readLimit)
executor
- 用于ScheduledExecutorService
的ScheduledExecutorService 。
writeLimit
- 0或以字节/秒为单位的限制
readLimit
- 0或以字节/秒为单位的限制
public GlobalTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor, long checkInterval)
executor
- 用于ScheduledExecutorService
的ScheduledExecutorService 。
checkInterval
- 通道两次性能计算之间的延迟,如果不计算统计数据,则延迟0。
public GlobalTrafficShapingHandler(EventExecutor executor)
executor
- 用于ScheduledExecutorService
的ScheduledExecutorService 。
protected int userDefinedWritabilityIndex()
userDefinedWritabilityIndex
在课堂上
AbstractTrafficShapingHandler
public long getMaxGlobalWriteSize()
public void setMaxGlobalWriteSize(long maxGlobalWriteSize)
maxGlobalWriteSize
- 设置暂停之前缓冲区全局允许的最大全局写入大小,默认值为400 MB。
public long queuesSize()
public final void release()
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.