You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2006/08/01 14:05:18 UTC

svn commit: r427548 - in /jakarta/httpcomponents/httpnio/trunk/src: java/org/apache/http/nio/ test/org/apache/http/nio/ test/tests/performance/

Author: olegk
Date: Tue Aug  1 05:05:17 2006
New Revision: 427548

URL: http://svn.apache.org/viewvc?rev=427548&view=rev
Log:
Brought NIO based HTTP data receiver and transmitter up to date with the current state of the HttpCore API

Modified:
    jakarta/httpcomponents/httpnio/trunk/src/java/org/apache/http/nio/NIOHttpDataTransmitter.java
    jakarta/httpcomponents/httpnio/trunk/src/java/org/apache/http/nio/NIOSocketHttpDataReceiver.java
    jakarta/httpcomponents/httpnio/trunk/src/java/org/apache/http/nio/NIOSocketHttpDataTransmitter.java
    jakarta/httpcomponents/httpnio/trunk/src/test/org/apache/http/nio/TestNIOHttpTransmitterAndReceiver.java
    jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/ChunkedIOvsContentLengthDelimIOTest.java
    jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/DefaultHttpDataReceiverFactory.java
    jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/DefaultHttpDataTransmitterFactory.java
    jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/HttpNIOvsHttpOIOTest.java
    jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/RawNIOvsRawOIOTest.java

Modified: jakarta/httpcomponents/httpnio/trunk/src/java/org/apache/http/nio/NIOHttpDataTransmitter.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpnio/trunk/src/java/org/apache/http/nio/NIOHttpDataTransmitter.java?rev=427548&r1=427547&r2=427548&view=diff
==============================================================================
--- jakarta/httpcomponents/httpnio/trunk/src/java/org/apache/http/nio/NIOHttpDataTransmitter.java (original)
+++ jakarta/httpcomponents/httpnio/trunk/src/java/org/apache/http/nio/NIOHttpDataTransmitter.java Tue Aug  1 05:05:17 2006
@@ -37,6 +37,7 @@
 import java.nio.charset.CoderResult;
 import java.nio.charset.CodingErrorAction;
 
+import org.apache.http.io.CharArrayBuffer;
 import org.apache.http.io.HttpDataTransmitter;
 import org.apache.http.params.HttpParams;
 import org.apache.http.params.HttpProtocolParams;
@@ -163,15 +164,15 @@
         }
     }
     
-    public void writeLine(final String s) throws IOException {
-        if (s == null) {
+    public void writeLine(final CharArrayBuffer buffer) throws IOException {
+        if (buffer == null) {
             return;
         }
-        // Do not bother if the string is empty
-        if (s.length() > 0 ) {
+        // Do not bother if the buffer is empty
+        if (buffer.length() > 0 ) {
         	this.charencoder.reset();
             // transfer the string in small chunks
-            int remaining = s.length();
+            int remaining = buffer.length();
             int offset = 0;
             while (remaining > 0) {
                 int l = this.chbuffer.remaining();
@@ -181,7 +182,7 @@
                     // terminate the encoding process
                     eol = true;
                 }
-                this.chbuffer.put(s, offset, offset + l);
+                this.chbuffer.put(buffer.buffer(), offset, offset + l);
                 this.chbuffer.flip();
                 write(this.charencoder, this.chbuffer, eol);
                 this.chbuffer.compact();
@@ -194,4 +195,17 @@
         writeCRLF();
     }
 
+    public void writeLine(final String s) throws IOException {
+        if (s == null) {
+            return;
+        }
+        if (s.length() > 0) {
+            CharArrayBuffer tmp = new CharArrayBuffer(s.length());
+            tmp.append(s);
+            writeLine(tmp);
+        } else {
+            write(CRLF);
+        }
+    }
+    
 }

Modified: jakarta/httpcomponents/httpnio/trunk/src/java/org/apache/http/nio/NIOSocketHttpDataReceiver.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpnio/trunk/src/java/org/apache/http/nio/NIOSocketHttpDataReceiver.java?rev=427548&r1=427547&r2=427548&view=diff
==============================================================================
--- jakarta/httpcomponents/httpnio/trunk/src/java/org/apache/http/nio/NIOSocketHttpDataReceiver.java (original)
+++ jakarta/httpcomponents/httpnio/trunk/src/java/org/apache/http/nio/NIOSocketHttpDataReceiver.java Tue Aug  1 05:05:17 2006
@@ -50,7 +50,7 @@
 
     private final SocketChannel channel;
     
-    public NIOSocketHttpDataReceiver(final Socket socket) throws IOException {
+    public NIOSocketHttpDataReceiver(final Socket socket, int buffersize) throws IOException {
         super();
         if (socket == null) {
             throw new IllegalArgumentException("Socket may not be null");
@@ -59,9 +59,11 @@
             throw new IllegalArgumentException("Socket does not implement NIO channel");
         }
         this.channel = socket.getChannel();
-        int buffersize = socket.getReceiveBufferSize();
-        if (buffersize < 2048) {
-            buffersize = 2048;
+        if (buffersize < 0) {
+            buffersize = socket.getReceiveBufferSize();
+        }
+        if (buffersize < 1024) {
+            buffersize = 1024;
         }
         initBuffer(buffersize);
     }

Modified: jakarta/httpcomponents/httpnio/trunk/src/java/org/apache/http/nio/NIOSocketHttpDataTransmitter.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpnio/trunk/src/java/org/apache/http/nio/NIOSocketHttpDataTransmitter.java?rev=427548&r1=427547&r2=427548&view=diff
==============================================================================
--- jakarta/httpcomponents/httpnio/trunk/src/java/org/apache/http/nio/NIOSocketHttpDataTransmitter.java (original)
+++ jakarta/httpcomponents/httpnio/trunk/src/java/org/apache/http/nio/NIOSocketHttpDataTransmitter.java Tue Aug  1 05:05:17 2006
@@ -48,7 +48,7 @@
 
     private final SocketChannel channel;
     
-    public NIOSocketHttpDataTransmitter(final Socket socket) throws SocketException {
+    public NIOSocketHttpDataTransmitter(final Socket socket, int buffersize) throws SocketException {
         super();
         if (socket == null) {
             throw new IllegalArgumentException("Socket may not be null");
@@ -57,9 +57,11 @@
             throw new IllegalArgumentException("Socket does not implement NIO channel");
         }
         this.channel = socket.getChannel();
-        int buffersize = socket.getSendBufferSize();
-        if (buffersize < 2048) {
-            buffersize = 2048;
+        if (buffersize < 0) {
+            buffersize = socket.getReceiveBufferSize();
+        }
+        if (buffersize < 1024) {
+            buffersize = 1024;
         }
         initBuffer(buffersize);
     }

Modified: jakarta/httpcomponents/httpnio/trunk/src/test/org/apache/http/nio/TestNIOHttpTransmitterAndReceiver.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpnio/trunk/src/test/org/apache/http/nio/TestNIOHttpTransmitterAndReceiver.java?rev=427548&r1=427547&r2=427548&view=diff
==============================================================================
--- jakarta/httpcomponents/httpnio/trunk/src/test/org/apache/http/nio/TestNIOHttpTransmitterAndReceiver.java (original)
+++ jakarta/httpcomponents/httpnio/trunk/src/test/org/apache/http/nio/TestNIOHttpTransmitterAndReceiver.java Tue Aug  1 05:05:17 2006
@@ -34,6 +34,7 @@
 import java.nio.channels.ReadableByteChannel;
 
 import org.apache.http.impl.DefaultHttpParams;
+import org.apache.http.io.CharArrayBuffer;
 import org.apache.http.nio.NIOHttpDataReceiver;
 import org.apache.http.nio.NIOHttpDataTransmitter;
 import org.apache.http.nio.mockup.NIOHttpDataReceiverMockup;
@@ -120,7 +121,8 @@
             transmitter.writeLine(teststrs[i]);
         }
         //this write operation should have no effect
-        transmitter.writeLine(null);
+        transmitter.writeLine((String)null);
+        transmitter.writeLine((CharArrayBuffer)null);
         transmitter.flush();
         
         NIOHttpDataReceiverMockup receiver = new NIOHttpDataReceiverMockup(transmitter.getData());
@@ -210,7 +212,8 @@
             transmitter.writeLine(teststrs[i]);
         }
         //this write operation should have no effect
-        transmitter.writeLine(null);
+        transmitter.writeLine((String)null);
+        transmitter.writeLine((CharArrayBuffer)null);
         transmitter.flush();
         
         NIOHttpDataReceiverMockup receiver = new NIOHttpDataReceiverMockup(transmitter.getData(), 1024);

Modified: jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/ChunkedIOvsContentLengthDelimIOTest.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/ChunkedIOvsContentLengthDelimIOTest.java?rev=427548&r1=427547&r2=427548&view=diff
==============================================================================
--- jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/ChunkedIOvsContentLengthDelimIOTest.java (original)
+++ jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/ChunkedIOvsContentLengthDelimIOTest.java Tue Aug  1 05:05:17 2006
@@ -95,7 +95,7 @@
                 Socket conn = new Socket("localhost", PORT);
                 try {
                 	HttpDataTransmitter datatransmitter = 
-                		new SocketHttpDataTransmitter(conn);
+                		new SocketHttpDataTransmitter(conn, BUFFER_SIZE);
                     OutputStream out = null;
                     if (chunked) {
                     	out = new ChunkedOutputStream(datatransmitter); 
@@ -118,7 +118,7 @@
                 Thread.sleep(100);
             }
         } finally {
-            t.destroy();
+            t.interrupt();
             t.join(1000);
         }
    }

Modified: jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/DefaultHttpDataReceiverFactory.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/DefaultHttpDataReceiverFactory.java?rev=427548&r1=427547&r2=427548&view=diff
==============================================================================
--- jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/DefaultHttpDataReceiverFactory.java (original)
+++ jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/DefaultHttpDataReceiverFactory.java Tue Aug  1 05:05:17 2006
@@ -50,6 +50,8 @@
  */
 public class DefaultHttpDataReceiverFactory implements HttpDataReceiverFactory {
     
+    private static int BUFFER_SIZE = 8 * 1024;
+    
     private boolean useNIO;
     
     public DefaultHttpDataReceiverFactory(boolean useNIO) {
@@ -67,15 +69,15 @@
         }
         if (socket instanceof SSLSocket) {
             if (this.useNIO) {
-                return new NIOSocketHttpDataReceiver(socket); 
+                return new NIOSocketHttpDataReceiver(socket, BUFFER_SIZE); 
             } else {
-                return new SocketHttpDataReceiver(socket); 
+                return new SocketHttpDataReceiver(socket, BUFFER_SIZE); 
             }
         } else {
             if (this.useNIO) {
-                return new NIOSocketHttpDataReceiver(socket); 
+                return new NIOSocketHttpDataReceiver(socket, BUFFER_SIZE); 
             } else {
-                return new SocketHttpDataReceiver(socket); 
+                return new SocketHttpDataReceiver(socket, BUFFER_SIZE); 
             }            
         }
     }

Modified: jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/DefaultHttpDataTransmitterFactory.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/DefaultHttpDataTransmitterFactory.java?rev=427548&r1=427547&r2=427548&view=diff
==============================================================================
--- jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/DefaultHttpDataTransmitterFactory.java (original)
+++ jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/DefaultHttpDataTransmitterFactory.java Tue Aug  1 05:05:17 2006
@@ -49,6 +49,8 @@
  * @since 4.0
  */
 public class DefaultHttpDataTransmitterFactory implements HttpDataTransmitterFactory {
+
+    private static int BUFFER_SIZE = 8 * 1024;
     
     private boolean useNIO;
     
@@ -67,15 +69,15 @@
         }
         if (socket instanceof SSLSocket) {
             if (this.useNIO) {
-                return new NIOSocketHttpDataTransmitter(socket); 
+                return new NIOSocketHttpDataTransmitter(socket, BUFFER_SIZE); 
             } else {
-                return new SocketHttpDataTransmitter(socket); 
+                return new SocketHttpDataTransmitter(socket, BUFFER_SIZE); 
             }
         } else {
             if (this.useNIO) {
-                return new NIOSocketHttpDataTransmitter(socket); 
+                return new NIOSocketHttpDataTransmitter(socket, BUFFER_SIZE); 
             } else {
-                return new SocketHttpDataTransmitter(socket); 
+                return new SocketHttpDataTransmitter(socket, BUFFER_SIZE); 
             }            
         }
     }

Modified: jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/HttpNIOvsHttpOIOTest.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/HttpNIOvsHttpOIOTest.java?rev=427548&r1=427547&r2=427548&view=diff
==============================================================================
--- jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/HttpNIOvsHttpOIOTest.java (original)
+++ jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/HttpNIOvsHttpOIOTest.java Tue Aug  1 05:05:17 2006
@@ -136,7 +136,7 @@
                 Thread.sleep(100);
             }
         } finally {
-            t.destroy();
+            t.interrupt();
             t.join(1000);
         }
    }

Modified: jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/RawNIOvsRawOIOTest.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/RawNIOvsRawOIOTest.java?rev=427548&r1=427547&r2=427548&view=diff
==============================================================================
--- jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/RawNIOvsRawOIOTest.java (original)
+++ jakarta/httpcomponents/httpnio/trunk/src/test/tests/performance/RawNIOvsRawOIOTest.java Tue Aug  1 05:05:17 2006
@@ -91,7 +91,7 @@
             }
             Thread.sleep(100);
         }
-        t.destroy();
+        t.interrupt();
         t.join(1000);
    }