Class PipeliningBufferingStreamSinkConduit

java.lang.Object
org.xnio.conduits.AbstractConduit<D>
org.xnio.conduits.AbstractSinkConduit<D>
org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
io.undertow.server.protocol.http.PipeliningBufferingStreamSinkConduit
All Implemented Interfaces:
org.xnio.conduits.Conduit, org.xnio.conduits.SinkConduit, org.xnio.conduits.StreamSinkConduit

public class PipeliningBufferingStreamSinkConduit extends org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
A buffer that is used when processing pipelined requests, that allows the server to buffer multiple responses into a single write() call.

This can improve performance when pipelining requests.

Author:
Stuart Douglas
  • Constructor Details

    • PipeliningBufferingStreamSinkConduit

      public PipeliningBufferingStreamSinkConduit(org.xnio.conduits.StreamSinkConduit next, ByteBufferPool pool)
  • Method Details

    • transferFrom

      public long transferFrom(FileChannel src, long position, long count) throws IOException
      Specified by:
      transferFrom in interface org.xnio.conduits.StreamSinkConduit
      Overrides:
      transferFrom in class org.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:
      transferFrom in interface org.xnio.conduits.StreamSinkConduit
      Overrides:
      transferFrom in class org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • write

      public long write(ByteBuffer[] srcs, int offset, int length) throws IOException
      Specified by:
      write in interface org.xnio.conduits.StreamSinkConduit
      Overrides:
      write in class org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • write

      public int write(ByteBuffer src) throws IOException
      Specified by:
      write in interface org.xnio.conduits.StreamSinkConduit
      Overrides:
      write in class org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • writeFinal

      public int writeFinal(ByteBuffer src) throws IOException
      Specified by:
      writeFinal in interface org.xnio.conduits.StreamSinkConduit
      Overrides:
      writeFinal in class org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • writeFinal

      public long writeFinal(ByteBuffer[] srcs, int offset, int length) throws IOException
      Specified by:
      writeFinal in interface org.xnio.conduits.StreamSinkConduit
      Overrides:
      writeFinal in class org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • flushPipelinedData

      public boolean flushPipelinedData() throws IOException
      Flushes the cached data.

      This should be called when a read thread fails to read any more request data, to make sure that any buffered data is flushed after the last pipelined request.

      If this returns false the read thread should suspend reads and resume writes

      Returns:
      true If the flush succeeded, false otherwise
      Throws:
      IOException
    • setupPipelineBuffer

      public void setupPipelineBuffer(HttpServerExchange exchange)
      Gets the channel wrapper that implements the buffering
    • awaitWritable

      public void awaitWritable(long time, TimeUnit timeUnit) throws IOException
      Specified by:
      awaitWritable in interface org.xnio.conduits.SinkConduit
      Overrides:
      awaitWritable in class org.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • awaitWritable

      public void awaitWritable() throws IOException
      Specified by:
      awaitWritable in interface org.xnio.conduits.SinkConduit
      Overrides:
      awaitWritable in class org.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • flush

      public boolean flush() throws IOException
      Specified by:
      flush in interface org.xnio.conduits.SinkConduit
      Overrides:
      flush in class org.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • terminateWrites

      public void terminateWrites() throws IOException
      Specified by:
      terminateWrites in interface org.xnio.conduits.SinkConduit
      Overrides:
      terminateWrites in class org.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • truncateWrites

      public void truncateWrites() throws IOException
      Specified by:
      truncateWrites in interface org.xnio.conduits.SinkConduit
      Overrides:
      truncateWrites in class org.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>
      Throws:
      IOException
    • exchangeComplete

      public void exchangeComplete(HttpServerExchange exchange)