High-performance, event-driven/reactive network stack for Java 11+
 
 
Go to file
Robinson 24a0a0d427
updated version
2022-12-17 23:49:36 +01:00
gradle/wrapper updated gradle 2022-12-15 23:55:59 +01:00
ignored_for_now/discovery More work done on cleaning up stack traces 2020-08-22 22:58:50 +02:00
not-fixed Removed coroutines from parts of the networking message processing. 2022-07-27 00:20:34 +02:00
src updated version 2022-12-17 23:49:36 +01:00
test/dorkboxTest/network Added sync/async unit block for thread/concurrent safe sync/async calls 2022-12-16 00:01:11 +01:00
.gitignore Updated to use Gradle Utils for gradle/project update management 2019-05-13 15:18:33 +02:00
LICENSE udpated license 2022-12-15 23:56:18 +01:00
LICENSE.Apachev2 Added license info. 2016-03-08 03:16:38 +01:00
LICENSE.BSD2 Converted to gradle 2018-08-18 23:15:46 +02:00
LICENSE.BSD3 Added license info. 2016-03-08 03:16:38 +01:00
LICENSE.CC0 Added more license files 2020-08-09 13:35:47 +02:00
LICENSE.MIT Added license info. 2016-03-08 03:16:38 +01:00
README.md updated version 2022-12-17 23:49:36 +01:00
build.gradle.kts updated version 2022-12-17 23:49:36 +01:00
gradle.properties Updated dependencies. 2021-10-01 10:44:55 +02:00
gradlew updated gradle 2022-12-15 23:55:59 +01:00
gradlew.bat updated gradle 2022-12-15 23:55:59 +01:00
logback.xml Cleaned up log messages, cleaned up handshakes, cleaned up polling code. Added unit test for concurrent client connections 2022-05-30 02:55:07 +02:00
settings.gradle.kts No longer depend on Utilities project, but on it's compiled sources. 2019-01-14 01:37:10 +01:00
storage.db Removed coroutines from parts of the networking message processing. 2022-07-27 00:20:34 +02:00

README.md

Network

Dorkbox Github Gitlab Bitbucket

The Network project is an encrypted, high-performance, event-driven/reactive Network stack with DNS and RMI, using Netty, Kryo, KryoNet RMI, and LZ4 via TCP/UDP.

These are the main features:

  • The connection between endpoints is AES256-GCM / EC curve25519. (WIP, this was updated for use with Aeron, which changes this)
  • The connection data is LZ4 compressed and byte-packed for small payload sizes. (WIP, this was updated for use with Aeron, which changes this)
  • The connection supports:

  • Remote Method Invocation

    • Blocking
    • Non-Blocking
    • Void returns
    • Exceptions can be returned
    • Kotlin coroutine suspend functions
  • Sending data when Idle

  • "Pinging" the remote end (for measuring round-trip time)

  • Firewall connections by IP+CIDR

  • Specify the connection type (nothing, compress, compress+encrypt)

  • The available transports are TCP and UDP

  • There are simple wrapper classes for:

    • Server
    • Client
    • MultiCast Broadcast client and server discovery (WIP, this was updated for use with Aeron, which changes this)
  • Note: There is a maximum packet size for UDP, 508 bytes to guarantee it's unfragmented

  • This is for cross-platform use, specifically - linux 32/64, mac 64, and windows 32/64. Java 1.8+

public static
class AMessage {
    public
    AMessage() {
    }
}

KryoCryptoSerializationManager.DEFAULT.register(AMessage.class);

Configuration configuration = new Configuration();
configuration.tcpPort = tcpPort;
configuration.host = host;

final Server server = new Server(configuration);
addEndPoint(server);
server.bind(false);

server.listeners()
      .add(new Listener<AMessage>() {
          @Override
          public
          void received(Connection connection, AMessage object) {
              System.err.println("Server received message from client. Bouncing back.");
              connection.send()
                        .TCP(object);
          }
      });

Client client = new Client(configuration);
client.disableRemoteKeyValidation();
addEndPoint(client);
client.connect(5000);

client.listeners()
      .add(new Listener<AMessage>() {
          @Override
          public
          void received(Connection connection, AMessage object) {
              ClientSendTest.this.checkPassed.set(true);
              System.err.println("Tada! It's been bounced back.");
              server.stop();
          }
      });

client.send()
      .TCP(new AMessage());

   

Maven Info

<dependencies>
    ...
    <dependency>
      <groupId>com.dorkbox</groupId>
      <artifactId>Network</artifactId>
      <version>6.2</version>
    </dependency>
</dependencies>

Gradle Info

dependencies {
    ...
    implementation("com.dorkbox:Network:6.2")
}

License

This project is © 2021 dorkbox llc, and is distributed under the terms of the Apache v2.0 License. See file "LICENSE" for further references.