io.netty.handler.traffic.package-info Maven / Gradle / Ivy
/*
* Copyright 2012 The Netty Project
*
* The Netty Project licenses this file to you under the Apache License,
* version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at:
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
/**
* Implementation of a Traffic Shaping Handler and Dynamic Statistics.
*
* The main goal of this package is to allow you to shape the traffic (bandwidth limitation),
* but also to get statistics on how many bytes are read or written. Both functions can
* be active or inactive (traffic or statistics).
*
* Two classes implement this behavior:
*
* - {@link io.netty.handler.traffic.TrafficCounter}: this class implements the counters needed by the
* handlers. It can be accessed to get some extra information like the read or write bytes since last check,
* the read and write bandwidth from last check...
*
* - {@link io.netty.handler.traffic.AbstractTrafficShapingHandler}: this abstract class implements
* the kernel of traffic shaping. It could be extended to fit your needs. Two classes are proposed as default
* implementations: see {@link io.netty.handler.traffic.ChannelTrafficShapingHandler} and
* {@link io.netty.handler.traffic.GlobalTrafficShapingHandler} respectively for Channel traffic shaping and
* global traffic shaping.
*
*
* Both inbound and outbound traffic can be shaped independently. This is done by either passing in
* the desired limiting values to the constructors of both the Channel and Global traffic shaping handlers,
* or by calling the configure method on the {@link io.netty.handler.traffic.AbstractTrafficShapingHandler}.
* A value of 0 for either parameter indicates that there should be no limitation. This allows you to monitor the
* incoming and outgoing traffic without shaping.
*
* To activate or deactivate the statistics, you can adjust the delay to a low (suggested not less than 200ms
* for efficiency reasons) or a high value (let say 24H in millisecond is huge enough to not get the problem)
* or even using 0 which means no computation will be done.
*
* If you want to do anything with these statistics, just override the doAccounting method.
* This interval can be changed either from the method configure
* in {@link io.netty.handler.traffic.AbstractTrafficShapingHandler} or directly using the method configure
* of {@link io.netty.handler.traffic.TrafficCounter}.
*
* Note that a new {@link io.netty.handler.traffic.ChannelTrafficShapingHandler} must be created
* for each new channel, but only one {@link io.netty.handler.traffic.GlobalTrafficShapingHandler} must be created
* for all channels.
*
* Note also that you can create different GlobalTrafficShapingHandler if you want to separate classes of
* channels (for instance either from business point of view or from bind address point of view).
*/
package io.netty.handler.traffic;