com.alibaba.rocketmq.shade.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:
*
* http://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 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 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 ChannelTrafficShapingHandler} and see {@link 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 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 AbstractTrafficShapingHandler}
* or directly using the method configure of {@link TrafficCounter}.
*
* Note that a new {@link ChannelTrafficShapingHandler} must be created for each new channel,
* but only one {@link 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;