diff --git a/src/dorkbox/network/connection/KryoCryptoSerializationManager.java b/src/dorkbox/network/connection/KryoCryptoSerializationManager.java index d95a71a2..e3535384 100644 --- a/src/dorkbox/network/connection/KryoCryptoSerializationManager.java +++ b/src/dorkbox/network/connection/KryoCryptoSerializationManager.java @@ -126,35 +126,30 @@ class KryoCryptoSerializationManager implements CryptoSerializationManager { } - - - static class ClassSerializer { + private static class ClassSerializer { final Class clazz; final Serializer serializer; - public ClassSerializer(final Class clazz, final Serializer serializer) { this.clazz = clazz; this.serializer = serializer; } } - static class ClassSerializer2 { + private static class ClassSerializer2 { final Class clazz; final Serializer serializer; final int id; - public ClassSerializer2(final Class clazz, final Serializer serializer, final int id) { this.clazz = clazz; this.serializer = serializer; this.id = id; } } - static class RemoteClass { + private static class RemoteClass { private final Class ifaceClass; private final Class implClass; - public RemoteClass(final Class ifaceClass, final Class implClass) { this.ifaceClass = ifaceClass; this.implClass = implClass; @@ -165,19 +160,21 @@ class KryoCryptoSerializationManager implements CryptoSerializationManager { private final ObjectPool kryoPool; // used by operations performed during kryo initialization, which are by default package access (since it's an anon-inner class - final List> classesToRegister = new ArrayList>(); - final List classSerializerToRegister = new ArrayList(); - final List classSerializer2ToRegister = new ArrayList(); - final List remoteClassToRegister = new ArrayList(); + private final List> classesToRegister = new ArrayList>(); + private final List classSerializerToRegister = new ArrayList(); + private final List classSerializer2ToRegister = new ArrayList(); + private final List remoteClassToRegister = new ArrayList(); - boolean shouldInitRMI = false; - InvokeMethodSerializer methodSerializer = null; - Serializer invocationSerializer = null; - RemoteObjectSerializer remoteObjectSerializer; + private boolean shouldInitRMI = false; + private InvokeMethodSerializer methodSerializer = null; + private Serializer invocationSerializer = null; + private RemoteObjectSerializer remoteObjectSerializer; /** + * By default, the serialization manager will compress+encrypt data to connections with remote IPs, and only compress on the loopback IP + *

* @param references * If true, each appearance of an object in the graph after the first is stored as an integer ordinal. When set to true, * {@link MapReferenceResolver} is used. This enables references to the same object and cyclic graphs to be serialized, @@ -201,6 +198,7 @@ class KryoCryptoSerializationManager implements CryptoSerializationManager { */ public KryoCryptoSerializationManager(final boolean references, final boolean registrationRequired, final SerializerFactory factory) { + kryoPool = ObjectPool.NonBlockingSoftReference(new PoolableObject() { @Override public @@ -503,7 +501,13 @@ class KryoCryptoSerializationManager implements CryptoSerializationManager { void writeWithCrypto(final ConnectionImpl connection, final ByteBuf buffer, final Object message) throws IOException { final KryoExtra kryo = kryoPool.take(); try { - kryo.writeCrypto(connection, buffer, message); + // we only need to encrypt when NOT on loopback, since encrypting on loopback is a waste of CPU + if (connection.isLoopback()) { + kryo.writeCompressed(connection, buffer, message); + } + else { + kryo.writeCrypto(connection, buffer, message); + } } finally { kryoPool.put(kryo); } @@ -523,7 +527,13 @@ class KryoCryptoSerializationManager implements CryptoSerializationManager { Object readWithCrypto(final ConnectionImpl connection, final ByteBuf buffer, final int length) throws IOException { final KryoExtra kryo = kryoPool.take(); try { - return kryo.readCrypto(connection, buffer, length); + // we only need to encrypt when NOT on loopback, since encrypting on loopback is a waste of CPU + if (connection.isLoopback()) { + return kryo.readCompressed(connection, buffer, length); + } + else { + return kryo.readCrypto(connection, buffer, length); + } } finally { kryoPool.put(kryo); }