forked from I2P_Developers/i2p.i2p
2004-11-13 jrandom
* Added throttles on how many I2PTunnel client connections we open at once * Replaced some buffered streams in I2PTunnel with unbuffered streams, as the streaming library used should take care of any buffering. * Added a cache for some objects used in I2PTunnel, especially useful when there are many short lived connections. * Trimmed the SimpleTimer's processing a bit
This commit is contained in:
@ -57,6 +57,9 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna
|
|||||||
|
|
||||||
private String handlerName;
|
private String handlerName;
|
||||||
|
|
||||||
|
private Object conLock = new Object();
|
||||||
|
private int pendingConnections = 0;
|
||||||
|
|
||||||
//public I2PTunnelClientBase(int localPort, boolean ownDest,
|
//public I2PTunnelClientBase(int localPort, boolean ownDest,
|
||||||
// Logging l) {
|
// Logging l) {
|
||||||
// I2PTunnelClientBase(localPort, ownDest, l, (EventDispatcher)null);
|
// I2PTunnelClientBase(localPort, ownDest, l, (EventDispatcher)null);
|
||||||
@ -269,7 +272,16 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna
|
|||||||
* @param s Socket to take care of
|
* @param s Socket to take care of
|
||||||
*/
|
*/
|
||||||
protected void manageConnection(Socket s) {
|
protected void manageConnection(Socket s) {
|
||||||
new ClientConnectionRunner(s, handlerName);
|
boolean useBlocking = false;
|
||||||
|
synchronized (conLock) {
|
||||||
|
pendingConnections++;
|
||||||
|
if (pendingConnections > 5)
|
||||||
|
useBlocking = true;
|
||||||
|
}
|
||||||
|
if (useBlocking)
|
||||||
|
clientConnectionRun(s);
|
||||||
|
else
|
||||||
|
new ClientConnectionRunner(s, handlerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean close(boolean forced) {
|
public boolean close(boolean forced) {
|
||||||
@ -326,6 +338,9 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna
|
|||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
clientConnectionRun(s);
|
clientConnectionRun(s);
|
||||||
|
synchronized (conLock) {
|
||||||
|
pendingConnections--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@ import java.util.TreeMap;
|
|||||||
import java.util.zip.GZIPInputStream;
|
import java.util.zip.GZIPInputStream;
|
||||||
import java.util.zip.GZIPOutputStream;
|
import java.util.zip.GZIPOutputStream;
|
||||||
|
|
||||||
|
import net.i2p.util.ByteCache;
|
||||||
import net.i2p.util.OrderedProperties;
|
import net.i2p.util.OrderedProperties;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -737,13 +738,16 @@ public class DataHelper {
|
|||||||
if ((orig == null) || (orig.length <= 0)) return orig;
|
if ((orig == null) || (orig.length <= 0)) return orig;
|
||||||
GZIPInputStream in = new GZIPInputStream(new ByteArrayInputStream(orig, offset, length), length);
|
GZIPInputStream in = new GZIPInputStream(new ByteArrayInputStream(orig, offset, length), length);
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream(length * 2);
|
ByteArrayOutputStream baos = new ByteArrayOutputStream(length * 2);
|
||||||
byte buf[] = new byte[4 * 1024];
|
ByteCache cache = ByteCache.getInstance(10, 4*1024);
|
||||||
|
ByteArray ba = cache.acquire();
|
||||||
|
byte buf[] = ba.getData(); // new byte[4 * 1024];
|
||||||
while (true) {
|
while (true) {
|
||||||
int read = in.read(buf);
|
int read = in.read(buf);
|
||||||
if (read == -1) break;
|
if (read == -1) break;
|
||||||
baos.write(buf, 0, read);
|
baos.write(buf, 0, read);
|
||||||
}
|
}
|
||||||
byte rv[] = baos.toByteArray();
|
byte rv[] = baos.toByteArray();
|
||||||
|
cache.release(ba);
|
||||||
//if (_log.shouldLog(Log.DEBUG))
|
//if (_log.shouldLog(Log.DEBUG))
|
||||||
// _log.debug("Decompression of " + orig.length + " into " + rv.length + " (or " + 100.0d
|
// _log.debug("Decompression of " + orig.length + " into " + rv.length + " (or " + 100.0d
|
||||||
// * (((double) rv.length) / ((double) orig.length)) + "% savings)");
|
// * (((double) rv.length) / ((double) orig.length)) + "% savings)");
|
||||||
|
Reference in New Issue
Block a user