@ChannelHandler.Sharable public class GlobalChannelTrafficShapingHandler extends AbstractTrafficShapingHandler
AbstractTrafficShapingHandler
的这种实现方式适用于全局和每信道流量整形,也就是全球带宽限制,无论开放通道的数量和每个通道的带宽限制如何。
channel.isWritable()
和channelWritabilityChanged(ctx)
来处理可写性,或者通过future.addListener(new GenericFutureListener())
返回将来返回的ctx.write()
。 release()
来释放所有内部资源。
这不会关闭EventExecutor
,因为它可能是共享的,所以你需要自己做。
ChannelHandler.Sharable
checkInterval, DEFAULT_CHECK_INTERVAL, DEFAULT_MAX_TIME, maxTime, trafficCounter
Constructor and Description |
---|
GlobalChannelTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor)
创建一个新的实例。
|
GlobalChannelTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor, long checkInterval)
创建一个新的实例。
|
GlobalChannelTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor, long writeGlobalLimit, long readGlobalLimit, long writeChannelLimit, long readChannelLimit)
创建一个新的实例。
|
GlobalChannelTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor, long writeGlobalLimit, long readGlobalLimit, long writeChannelLimit, long readChannelLimit, long checkInterval)
创建一个新的实例。
|
GlobalChannelTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor, long writeGlobalLimit, long readGlobalLimit, long writeChannelLimit, long readChannelLimit, long checkInterval, long maxTime)
创建一个新的实例。
|
Modifier and Type | Method and Description |
---|---|
float |
accelerationFactor() |
void |
channelRead(ChannelHandlerContext ctx, java.lang.Object msg)
|
java.util.Collection<TrafficCounter> |
channelTrafficCounters()
例如,允许doAccounting使用每个频道的TrafficCounter。
|
protected long |
checkWaitReadTime(ChannelHandlerContext ctx, long wait, long now)
在GTSH中覆盖的方法考虑到通道的特定定时器。
|
void |
configureChannel(long newWriteLimit, long newReadLimit) |
protected void |
doAccounting(TrafficCounter counter)
每次从TrafficCounters计算会计时调用。
|
long |
getMaxGlobalWriteSize() |
long |
getReadChannelLimit() |
long |
getWriteChannelLimit() |
void |
handlerAdded(ChannelHandlerContext ctx)
子类可以忽略这个方法。
|
void |
handlerRemoved(ChannelHandlerContext ctx)
子类可以忽略这个方法。
|
protected void |
informReadOperation(ChannelHandlerContext ctx, long now)
在GTSH中覆盖的方法考虑到通道的特定定时器。
|
float |
maxDeviation() |
protected long |
maximumCumulativeReadBytes() |
protected long |
maximumCumulativeWrittenBytes() |
long |
queuesSize() |
void |
release()
释放此实例的所有内部资源。
|
void |
setMaxDeviation(float maxDeviation, float slowDownFactor, float accelerationFactor) |
void |
setMaxGlobalWriteSize(long maxGlobalWriteSize)
请注意,更改将被视为尽力而为,这意味着所有已计划的流量都不会改变,但仅适用于新的流量。
|
void |
setReadChannelLimit(long readLimit) |
void |
setWriteChannelLimit(long writeLimit) |
float |
slowDownFactor() |
protected void |
submitWrite(ChannelHandlerContext ctx, java.lang.Object msg, long size, long writedelay, long now, ChannelPromise promise) |
java.lang.String |
toString() |
protected int |
userDefinedWritabilityIndex() |
void |
write(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise)
|
calculateSize, channelRegistered, configure, configure, configure, getCheckInterval, getMaxTimeWait, getMaxWriteDelay, getMaxWriteSize, getReadLimit, getWriteLimit, isHandlerActive, read, setCheckInterval, setMaxTimeWait, setMaxWriteDelay, setMaxWriteSize, setReadLimit, setWriteLimit, submitWrite, trafficCounter
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 GlobalChannelTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor, long writeGlobalLimit, long readGlobalLimit, long writeChannelLimit, long readChannelLimit, long checkInterval, long maxTime)
executor
- 用于ScheduledExecutorService
的ScheduledExecutorService 。
writeGlobalLimit
- 0或以字节/秒为单位的限制
readGlobalLimit
- 0或以字节/秒为单位的限制
writeChannelLimit
- 0或以字节/秒为单位的限制
readChannelLimit
- 0或以字节/秒为单位的限制
checkInterval
- 通道的两次性能计算之间的延迟,如果不计算统计数据,则延迟0。
maxTime
-
maxTime
等待的最大延迟时间。
public GlobalChannelTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor, long writeGlobalLimit, long readGlobalLimit, long writeChannelLimit, long readChannelLimit, long checkInterval)
executor
- 用于ScheduledExecutorService
的ScheduledExecutorService 。
writeGlobalLimit
- 0或以字节/秒为单位的限制
readGlobalLimit
- 0或以字节/秒为单位的限制
writeChannelLimit
- 0或以字节/秒为单位的限制
readChannelLimit
- 0或以字节/秒为单位的限制
checkInterval
- 通道两次性能计算之间的延迟,如果不计算统计数据,则延迟0。
public GlobalChannelTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor, long writeGlobalLimit, long readGlobalLimit, long writeChannelLimit, long readChannelLimit)
executor
- 用于ScheduledExecutorService
的ScheduledExecutorService 。
writeGlobalLimit
- 0或以字节/秒为单位的限制
readGlobalLimit
- 0或以字节/秒为单位的限制
writeChannelLimit
- 0或以字节/秒为单位的限制
readChannelLimit
- 0或以字节/秒为单位的限制
public GlobalChannelTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor, long checkInterval)
executor
- 用于ScheduledExecutorService
的ScheduledExecutorService 。
checkInterval
- 通道两次性能计算之间的延迟,如果不计算统计数据,则延迟0。
public GlobalChannelTrafficShapingHandler(java.util.concurrent.ScheduledExecutorService executor)
executor
- 用于ScheduledExecutorService
的ScheduledExecutorService 。
protected int userDefinedWritabilityIndex()
userDefinedWritabilityIndex
在课堂上
AbstractTrafficShapingHandler
public float maxDeviation()
public float accelerationFactor()
public float slowDownFactor()
public void setMaxDeviation(float maxDeviation, float slowDownFactor, float accelerationFactor)
maxDeviation
- 计算平均值时允许的最大偏差,默认偏差为0.1,因此为所需带宽的+/- 10%。
最大值为0.4。
slowDownFactor
- 将因子设置为+ x%给客户太快(最小值为0,意味着没有减速因子),默认值为40%(0.4)。
accelerationFactor
- 将因子设置为-x%给客户端太慢(最大值为0,意味着没有加速因子),默认值为-10%(-0.1)。
protected void doAccounting(TrafficCounter counter)
AbstractTrafficShapingHandler
doAccounting
在课堂上
AbstractTrafficShapingHandler
counter
- 计算其性能的
counter
public long getMaxGlobalWriteSize()
public void setMaxGlobalWriteSize(long maxGlobalWriteSize)
maxGlobalWriteSize
- 设置写暂停之前缓冲区全局允许的最大全局写入大小。
public long queuesSize()
public void configureChannel(long newWriteLimit, long newReadLimit)
newWriteLimit
- 通道写入限制
newReadLimit
- 通道读取限制
public long getWriteChannelLimit()
public void setWriteChannelLimit(long writeLimit)
writeLimit
- 通道写入限制
public long getReadChannelLimit()
public void setReadChannelLimit(long readLimit)
readLimit
- 通道读取限制
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
public void channelRead(ChannelHandlerContext ctx, java.lang.Object msg) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelRead(Object)
转发到ChannelPipeline
中的下一个ChannelInboundHandler
。
子类可以重写此方法来更改行为。
channelRead
在界面
ChannelInboundHandler
channelRead
在课堂上
AbstractTrafficShapingHandler
java.lang.Exception
protected long checkWaitReadTime(ChannelHandlerContext ctx, long wait, long now)
AbstractTrafficShapingHandler
wait
- 以毫秒计算的等待延迟
now
- 现在的相对时间,以毫秒为单位
protected void informReadOperation(ChannelHandlerContext ctx, long now)
AbstractTrafficShapingHandler
now
- 现在的相对时间,以毫秒为单位
protected long maximumCumulativeWrittenBytes()
protected long maximumCumulativeReadBytes()
public java.util.Collection<TrafficCounter> channelTrafficCounters()
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
在课堂上
AbstractTrafficShapingHandler
ctx
- 进行写入操作的ChannelHandlerContext
msg
- 要写的消息
promise
- 在操作完成后通知ChannelPromise
java.lang.Exception
- 发生错误时抛出
protected void submitWrite(ChannelHandlerContext ctx, java.lang.Object msg, long size, long writedelay, long now, ChannelPromise promise)
public java.lang.String toString()
Copyright © 2008–2018 The Netty Project. All rights reserved.