class RateLimiter extends Serializable
A leaking bucket rate limiter. It can be used to limit rate of anything, but typically it is used to limit rate of data transfer.
It starts with an empty bucket. When packets arrive, they are added to the bucket. The bucket has a constant size and is leaking at a constant rate. If the bucket overflows, the thread is delayed by the amount of time proportional to the amount of the overflow.
This class is thread safe and lockless.
- Alphabetic
- By Inheritance
- RateLimiter
- Serializable
- Serializable
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
-
new
RateLimiter(rate: Long, bucketSize: Long, time: () ⇒ Long = System.currentTimeMillis, sleep: (Long) ⇒ Any = Thread.sleep)
- rate
maximum allowed long-term rate per 1000 units of time
- bucketSize
maximum acceptable "burst"
- time
source of time; typically 1 unit = 1 ms
- sleep
a function to call to slow down the calling thread; must use the same time units as
time
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
def
maybeSleep(packetSize: Long): Unit
Processes a single packet.
Processes a single packet. If the packet is bigger than the current amount of space available in the bucket, this method will sleep for appropriate amount of time, in order to not exceed the target rate.
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()