Package io.undertow.conduits
Class RateLimitingStreamSinkConduit
java.lang.Object
org.xnio.conduits.AbstractConduit<D>
org.xnio.conduits.AbstractSinkConduit<D>
org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
io.undertow.conduits.RateLimitingStreamSinkConduit
- All Implemented Interfaces:
org.xnio.conduits.Conduit,org.xnio.conduits.SinkConduit,org.xnio.conduits.StreamSinkConduit
public class RateLimitingStreamSinkConduit
extends org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
Class that implements the token bucket algorithm.
Allows send speed to be throttled
Note that throttling is applied after an initial write, so if a big write is performed initially it may be a while before it can write again.
- Author:
- Stuart Douglas
-
Field Summary
Fields inherited from class org.xnio.conduits.AbstractConduit
next -
Constructor Summary
ConstructorsConstructorDescriptionRateLimitingStreamSinkConduit(org.xnio.conduits.StreamSinkConduit next, int bytes, long time, TimeUnit timeUnit) -
Method Summary
Modifier and TypeMethodDescriptionvoidvoidawaitWritable(long time, TimeUnit timeUnit) booleanvoidvoidlongtransferFrom(FileChannel src, long position, long count) longtransferFrom(org.xnio.channels.StreamSourceChannel source, long count, ByteBuffer throughBuffer) voidintwrite(ByteBuffer src) longwrite(ByteBuffer[] srcs, int offs, int len) intwriteFinal(ByteBuffer src) longwriteFinal(ByteBuffer[] srcs, int offs, int len) Methods inherited from class org.xnio.conduits.AbstractSinkConduit
flush, getWriteThread, isWriteShutdown, setWriteReadyHandler, terminateWrites, truncateWritesMethods inherited from class org.xnio.conduits.AbstractConduit
getWorkerMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.xnio.conduits.Conduit
getWorkerMethods inherited from interface org.xnio.conduits.SinkConduit
flush, getWriteThread, isWriteShutdown, setWriteReadyHandler, terminateWrites, truncateWrites
-
Constructor Details
-
RateLimitingStreamSinkConduit
public RateLimitingStreamSinkConduit(org.xnio.conduits.StreamSinkConduit next, int bytes, long time, TimeUnit timeUnit) - Parameters:
next- The next conduitbytes- The number of bytes that are allowed per time frametime- The time frametimeUnit- The time unit
-
-
Method Details
-
write
- Specified by:
writein interfaceorg.xnio.conduits.StreamSinkConduit- Overrides:
writein classorg.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>- Throws:
IOException
-
transferFrom
- Specified by:
transferFromin interfaceorg.xnio.conduits.StreamSinkConduit- Overrides:
transferFromin classorg.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>- Throws:
IOException
-
transferFrom
public long transferFrom(org.xnio.channels.StreamSourceChannel source, long count, ByteBuffer throughBuffer) throws IOException - Specified by:
transferFromin interfaceorg.xnio.conduits.StreamSinkConduit- Overrides:
transferFromin classorg.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>- Throws:
IOException
-
write
- Specified by:
writein interfaceorg.xnio.conduits.StreamSinkConduit- Overrides:
writein classorg.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>- Throws:
IOException
-
writeFinal
- Specified by:
writeFinalin interfaceorg.xnio.conduits.StreamSinkConduit- Overrides:
writeFinalin classorg.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>- Throws:
IOException
-
writeFinal
- Specified by:
writeFinalin interfaceorg.xnio.conduits.StreamSinkConduit- Overrides:
writeFinalin classorg.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>- Throws:
IOException
-
resumeWrites
public void resumeWrites()- Specified by:
resumeWritesin interfaceorg.xnio.conduits.SinkConduit- Overrides:
resumeWritesin classorg.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>
-
suspendWrites
public void suspendWrites()- Specified by:
suspendWritesin interfaceorg.xnio.conduits.SinkConduit- Overrides:
suspendWritesin classorg.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>
-
wakeupWrites
public void wakeupWrites()- Specified by:
wakeupWritesin interfaceorg.xnio.conduits.SinkConduit- Overrides:
wakeupWritesin classorg.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>
-
isWriteResumed
public boolean isWriteResumed()- Specified by:
isWriteResumedin interfaceorg.xnio.conduits.SinkConduit- Overrides:
isWriteResumedin classorg.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>
-
awaitWritable
- Specified by:
awaitWritablein interfaceorg.xnio.conduits.SinkConduit- Overrides:
awaitWritablein classorg.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>- Throws:
IOException
-
awaitWritable
- Specified by:
awaitWritablein interfaceorg.xnio.conduits.SinkConduit- Overrides:
awaitWritablein classorg.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>- Throws:
IOException
-