org.jboss.netty.handler.traffic
Class AbstractTrafficShapingHandler

java.lang.Object
  extended by org.jboss.netty.channel.SimpleChannelHandler
      extended by org.jboss.netty.handler.traffic.AbstractTrafficShapingHandler
All Implemented Interfaces:
org.jboss.netty.channel.ChannelDownstreamHandler, org.jboss.netty.channel.ChannelHandler, org.jboss.netty.channel.ChannelUpstreamHandler, org.jboss.netty.util.ExternalResourceReleasable
Direct Known Subclasses:
ChannelTrafficShapingHandler, GlobalTrafficShapingHandler

public abstract class AbstractTrafficShapingHandler
extends org.jboss.netty.channel.SimpleChannelHandler
implements org.jboss.netty.util.ExternalResourceReleasable

AbstractTrafficShapingHandler allows to limit the global bandwidth (see GlobalTrafficShapingHandler) or per session bandwidth (see ChannelTrafficShapingHandler), as traffic shaping. It allows too to implement an almost real time monitoring of the bandwidth using the monitors from TrafficCounter that will call back every checkInterval the method doAccounting of this handler.

An ObjectSizeEstimator can be passed at construction to specify what is the size of the object to be read or write accordingly to the type of object. If not specified, it will used the DefaultObjectSizeEstimator implementation.

If you want for any particular reasons to stop the monitoring (accounting) or to change the read/write limit or the check interval, several methods allow that for you:

Version:
$Rev: 1225 $, $Date: 2012-05-20 10:48:53 +0200 (dim., 20 mai 2012) $
Author:
The Netty Project (netty-dev@lists.jboss.org), Frederic Bregier

Nested Class Summary
 
Nested classes/interfaces inherited from interface org.jboss.netty.channel.ChannelHandler
org.jboss.netty.channel.ChannelHandler.Sharable
 
Field Summary
protected  long checkInterval
          Delay between two performance snapshots
static long DEFAULT_CHECK_INTERVAL
          Default delay between two checks: 1s
protected  org.jboss.netty.util.Timer timer
          Timer to associated to any TrafficCounter
protected  TrafficCounter trafficCounter
          Traffic Counter
 
Constructor Summary
AbstractTrafficShapingHandler(org.jboss.netty.util.ObjectSizeEstimator objectSizeEstimator, org.jboss.netty.util.Timer timer)
          Constructor using the specified ObjectSizeEstimator and using NO LIMIT and default Check Interval
AbstractTrafficShapingHandler(org.jboss.netty.util.ObjectSizeEstimator objectSizeEstimator, org.jboss.netty.util.Timer timer, long checkInterval)
          Constructor using the specified ObjectSizeEstimator and using NO LIMIT
AbstractTrafficShapingHandler(org.jboss.netty.util.ObjectSizeEstimator objectSizeEstimator, org.jboss.netty.util.Timer timer, long writeLimit, long readLimit)
          Constructor using the specified ObjectSizeEstimator and using default Check Interval
AbstractTrafficShapingHandler(org.jboss.netty.util.ObjectSizeEstimator objectSizeEstimator, org.jboss.netty.util.Timer timer, long writeLimit, long readLimit, long checkInterval)
          Constructor using the specified ObjectSizeEstimator
AbstractTrafficShapingHandler(org.jboss.netty.util.Timer timer)
          Constructor using default ObjectSizeEstimator and using NO LIMIT and default Check Interval
AbstractTrafficShapingHandler(org.jboss.netty.util.Timer timer, long checkInterval)
          Constructor using default ObjectSizeEstimator and using NO LIMIT
AbstractTrafficShapingHandler(org.jboss.netty.util.Timer timer, long writeLimit, long readLimit)
          Constructor using default ObjectSizeEstimator and using default Check Interval
AbstractTrafficShapingHandler(org.jboss.netty.util.Timer timer, long writeLimit, long readLimit, long checkInterval)
          Constructor using default ObjectSizeEstimator
 
Method Summary
 void configure(long newCheckInterval)
          Change the check interval.
 void configure(long newWriteLimit, long newReadLimit)
          Change the underlying limitations.
 void configure(long newWriteLimit, long newReadLimit, long newCheckInterval)
          Change the underlying limitations and check interval.
protected  void doAccounting(TrafficCounter counter)
          Called each time the accounting is computed from the TrafficCounters.
 TrafficCounter getTrafficCounter()
           
 void handleDownstream(org.jboss.netty.channel.ChannelHandlerContext ctx, org.jboss.netty.channel.ChannelEvent e)
           
 void messageReceived(org.jboss.netty.channel.ChannelHandlerContext arg0, org.jboss.netty.channel.MessageEvent arg1)
           
 void releaseExternalResources()
           
 String toString()
           
 void writeRequested(org.jboss.netty.channel.ChannelHandlerContext arg0, org.jboss.netty.channel.MessageEvent arg1)
           
 
Methods inherited from class org.jboss.netty.channel.SimpleChannelHandler
bindRequested, channelBound, channelClosed, channelConnected, channelDisconnected, channelInterestChanged, channelOpen, channelUnbound, childChannelClosed, childChannelOpen, closeRequested, connectRequested, disconnectRequested, exceptionCaught, handleUpstream, setInterestOpsRequested, unbindRequested, writeComplete
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

DEFAULT_CHECK_INTERVAL

public static final long DEFAULT_CHECK_INTERVAL
Default delay between two checks: 1s

See Also:
Constant Field Values

trafficCounter

protected TrafficCounter trafficCounter
Traffic Counter


timer

protected org.jboss.netty.util.Timer timer
Timer to associated to any TrafficCounter


checkInterval

protected long checkInterval
Delay between two performance snapshots

Constructor Detail

AbstractTrafficShapingHandler

public AbstractTrafficShapingHandler(org.jboss.netty.util.Timer timer,
                                     long writeLimit,
                                     long readLimit,
                                     long checkInterval)
Constructor using default ObjectSizeEstimator

Parameters:
timer - created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024)
writeLimit - 0 or a limit in bytes/s
readLimit - 0 or a limit in bytes/s
checkInterval - The delay between two computations of performances for channels or 0 if no stats are to be computed

AbstractTrafficShapingHandler

public AbstractTrafficShapingHandler(org.jboss.netty.util.ObjectSizeEstimator objectSizeEstimator,
                                     org.jboss.netty.util.Timer timer,
                                     long writeLimit,
                                     long readLimit,
                                     long checkInterval)
Constructor using the specified ObjectSizeEstimator

Parameters:
objectSizeEstimator - the ObjectSizeEstimator that will be used to compute the size of the message
timer - created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024)
writeLimit - 0 or a limit in bytes/s
readLimit - 0 or a limit in bytes/s
checkInterval - The delay between two computations of performances for channels or 0 if no stats are to be computed

AbstractTrafficShapingHandler

public AbstractTrafficShapingHandler(org.jboss.netty.util.Timer timer,
                                     long writeLimit,
                                     long readLimit)
Constructor using default ObjectSizeEstimator and using default Check Interval

Parameters:
timer - created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024)
writeLimit - 0 or a limit in bytes/s
readLimit - 0 or a limit in bytes/s

AbstractTrafficShapingHandler

public AbstractTrafficShapingHandler(org.jboss.netty.util.ObjectSizeEstimator objectSizeEstimator,
                                     org.jboss.netty.util.Timer timer,
                                     long writeLimit,
                                     long readLimit)
Constructor using the specified ObjectSizeEstimator and using default Check Interval

Parameters:
objectSizeEstimator - the ObjectSizeEstimator that will be used to compute the size of the message
timer - created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024)
writeLimit - 0 or a limit in bytes/s
readLimit - 0 or a limit in bytes/s

AbstractTrafficShapingHandler

public AbstractTrafficShapingHandler(org.jboss.netty.util.Timer timer)
Constructor using default ObjectSizeEstimator and using NO LIMIT and default Check Interval

Parameters:
timer - created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024)

AbstractTrafficShapingHandler

public AbstractTrafficShapingHandler(org.jboss.netty.util.ObjectSizeEstimator objectSizeEstimator,
                                     org.jboss.netty.util.Timer timer)
Constructor using the specified ObjectSizeEstimator and using NO LIMIT and default Check Interval

Parameters:
objectSizeEstimator - the ObjectSizeEstimator that will be used to compute the size of the message
timer - created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024)

AbstractTrafficShapingHandler

public AbstractTrafficShapingHandler(org.jboss.netty.util.Timer timer,
                                     long checkInterval)
Constructor using default ObjectSizeEstimator and using NO LIMIT

Parameters:
timer - created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024)
checkInterval - The delay between two computations of performances for channels or 0 if no stats are to be computed

AbstractTrafficShapingHandler

public AbstractTrafficShapingHandler(org.jboss.netty.util.ObjectSizeEstimator objectSizeEstimator,
                                     org.jboss.netty.util.Timer timer,
                                     long checkInterval)
Constructor using the specified ObjectSizeEstimator and using NO LIMIT

Parameters:
objectSizeEstimator - the ObjectSizeEstimator that will be used to compute the size of the message
timer - created once for instance like HashedWheelTimer(10, TimeUnit.MILLISECONDS, 1024)
checkInterval - The delay between two computations of performances for channels or 0 if no stats are to be computed
Method Detail

configure

public void configure(long newWriteLimit,
                      long newReadLimit,
                      long newCheckInterval)
Change the underlying limitations and check interval.

Parameters:
newWriteLimit -
newReadLimit -
newCheckInterval -

configure

public void configure(long newWriteLimit,
                      long newReadLimit)
Change the underlying limitations.

Parameters:
newWriteLimit -
newReadLimit -

configure

public void configure(long newCheckInterval)
Change the check interval.

Parameters:
newCheckInterval -

doAccounting

protected void doAccounting(TrafficCounter counter)
Called each time the accounting is computed from the TrafficCounters. This method could be used for instance to implement almost real time accounting.

Parameters:
counter - the TrafficCounter that computes its performance

messageReceived

public void messageReceived(org.jboss.netty.channel.ChannelHandlerContext arg0,
                            org.jboss.netty.channel.MessageEvent arg1)
                     throws Exception
Overrides:
messageReceived in class org.jboss.netty.channel.SimpleChannelHandler
Throws:
Exception

writeRequested

public void writeRequested(org.jboss.netty.channel.ChannelHandlerContext arg0,
                           org.jboss.netty.channel.MessageEvent arg1)
                    throws Exception
Overrides:
writeRequested in class org.jboss.netty.channel.SimpleChannelHandler
Throws:
Exception

handleDownstream

public void handleDownstream(org.jboss.netty.channel.ChannelHandlerContext ctx,
                             org.jboss.netty.channel.ChannelEvent e)
                      throws Exception
Specified by:
handleDownstream in interface org.jboss.netty.channel.ChannelDownstreamHandler
Overrides:
handleDownstream in class org.jboss.netty.channel.SimpleChannelHandler
Throws:
Exception

getTrafficCounter

public TrafficCounter getTrafficCounter()
Returns:
the current TrafficCounter (if channel is still connected)

releaseExternalResources

public void releaseExternalResources()
Specified by:
releaseExternalResources in interface org.jboss.netty.util.ExternalResourceReleasable

toString

public String toString()
Overrides:
toString in class Object


Copyright © 2009-2012 Frederic Bregier. All Rights Reserved.