INT-2635 Set Buffer Size for Piped Streams

Backport to 2.1.x

Improve performance.

For NIO sockets, a pair of PipedInput/OutputStreams are
used to transfer data from the reading thread to the
assembling thread.

The stream used the default buffer size (1024) which was
inefficient for large messages.

This change uses the underlying socket's receiveBufferSize
attribute to set the size of the piped stream, allowing
for more efficient data transfer.
This commit is contained in:
Gary Russell
2012-06-21 19:04:49 -04:00
parent 2bd02d06d6
commit 3c950e49c4

View File

@@ -74,7 +74,11 @@ public class TcpNioConnection extends AbstractTcpConnection {
public TcpNioConnection(SocketChannel socketChannel, boolean server, boolean lookupHost) throws Exception {
super(socketChannel.socket(), server, lookupHost);
this.socketChannel = socketChannel;
this.pipedInputStream = new PipedInputStream();
int receiveBufferSize = socketChannel.socket().getReceiveBufferSize();
if (receiveBufferSize <= 0) {
receiveBufferSize = this.maxMessageSize;
}
this.pipedInputStream = new PipedInputStream(receiveBufferSize);
this.pipedOutputStream = new PipedOutputStream(this.pipedInputStream);
this.channelOutputStream = new ChannelOutputStream();
}