Skip to content

Latest commit

 

History

History
73 lines (64 loc) · 3.21 KB

README.md

File metadata and controls

73 lines (64 loc) · 3.21 KB

netty-raknet

Build Status Discord Chat Known Vulnerabilities SonarCloud Bugs SonarCloud Coverage

High performance RakNet implementation targeting unreliable and rate-limited client connections. It provides strict netty style server and client channels.

This implementation uses Netty channels to provide a fast and effective RakNet server, offering the full feature set of the transport protocol, while providing room for extension with any plugins or custom behavior.

Features

  • Recylable objects:
    • Heavily used objects are recycled.
    • Reduces GC pressure.
    • Instrumented with Netty leak detection.
  • Strict Netty patterns:
    • Uses Bootstrap and ServerBootstrap pattern.
    • Signals backpressure using Channel writability.
    • Uses Netty ChannelOptions for channel config.
    • Follows the normal bind and connect patterns.
    • Accurate promise responses for write, connect and others.
  • 0-copy buffer interactions:
    • Retained buffer references throughout.
    • Composite buffers used for encapsulation and defragmentation.
  • Easy-to-use data streaming interface:
    • Configurable packet ID used for raw ByteBuf writing and reading.
    • Extensible to allow for multiple packet ID and channel configurations.
    • True to Netty form, the pipeline can be modified and augmented as needed.
  • Advanced flow control
    • Back pressure signals useful for buffer limiting when client is overloaded.
    • Pending frame-set limits reduce unnecessary resends during high transfer rates.
    • Resend priority based on frame sequence so you get older packets faster.
  • Automated flush driver
    • Recommended to write to pipeline with no flush.
    • Flush cycles condense outbound data for best use of MTU.

Usage

Maven

    <dependencies>
        <dependency>
            <groupId>network.ycc</groupId>
            <artifactId>raknet-server</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>network.ycc</groupId>
            <artifactId>raknet-client</artifactId>
            <version>1.1</version>
        </dependency>
    </dependencies>

    <repository>
        <id>waterdogpe-repo-releases</id>
        <name>WaterdogPE Repository</name>
        <url>https://repo.waterdog.dev/releases</url>
    </repository>

Example

A good example can be seen in the simple Hello World test case.