Class 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
    • Field Summary

      • Fields inherited from class org.xnio.conduits.AbstractConduit

        next
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void awaitWritable()  
      void awaitWritable​(long time, java.util.concurrent.TimeUnit timeUnit)  
      void exchangeComplete​(HttpServerExchange exchange)  
      boolean flush()  
      boolean flushPipelinedData()
      Flushes the cached data.
      void setupPipelineBuffer​(HttpServerExchange exchange)
      Gets the channel wrapper that implements the buffering
      void terminateWrites()  
      long transferFrom​(java.nio.channels.FileChannel src, long position, long count)  
      long transferFrom​(org.xnio.channels.StreamSourceChannel source, long count, java.nio.ByteBuffer throughBuffer)  
      void truncateWrites()  
      int write​(java.nio.ByteBuffer src)  
      long write​(java.nio.ByteBuffer[] srcs, int offset, int length)  
      int writeFinal​(java.nio.ByteBuffer src)  
      long writeFinal​(java.nio.ByteBuffer[] srcs, int offset, int length)  
      • Methods inherited from class org.xnio.conduits.AbstractSinkConduit

        getWriteThread, isWriteResumed, isWriteShutdown, resumeWrites, setWriteReadyHandler, suspendWrites, wakeupWrites
      • Methods inherited from class org.xnio.conduits.AbstractConduit

        getWorker
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface org.xnio.conduits.Conduit

        getWorker
      • Methods inherited from interface org.xnio.conduits.SinkConduit

        getWriteThread, isWriteResumed, isWriteShutdown, resumeWrites, setWriteReadyHandler, suspendWrites, wakeupWrites
    • Constructor Detail

      • PipeliningBufferingStreamSinkConduit

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

      • transferFrom

        public long transferFrom​(java.nio.channels.FileChannel src,
                                 long position,
                                 long count)
                          throws java.io.IOException
        Specified by:
        transferFrom in interface org.xnio.conduits.StreamSinkConduit
        Overrides:
        transferFrom in class org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
        Throws:
        java.io.IOException
      • transferFrom

        public long transferFrom​(org.xnio.channels.StreamSourceChannel source,
                                 long count,
                                 java.nio.ByteBuffer throughBuffer)
                          throws java.io.IOException
        Specified by:
        transferFrom in interface org.xnio.conduits.StreamSinkConduit
        Overrides:
        transferFrom in class org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
        Throws:
        java.io.IOException
      • write

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

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

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

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

        public boolean flushPipelinedData()
                                   throws java.io.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:
        java.io.IOException
      • setupPipelineBuffer

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

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

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

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

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

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