From fb93c0e34d047eb0cdd3ad5f38deb2000f3d7d61 Mon Sep 17 00:00:00 2001 From: DJGosnell Date: Sun, 17 Sep 2023 01:51:55 -0400 Subject: [PATCH] Added readme for each nuget package. Added NuGet description for Quic package. --- src/NexNet.Generator/README.md | 39 ++++++++++++++++++++++++++++++ src/NexNet.Quic/NexNet.Quic.csproj | 3 ++- src/NexNet.Quic/README.md | 39 ++++++++++++++++++++++++++++++ src/NexNet.props | 2 ++ src/NexNet/NexNet.csproj | 2 +- src/NexNet/README.md | 39 ++++++++++++++++++++++++++++++ 6 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 src/NexNet.Generator/README.md create mode 100644 src/NexNet.Quic/README.md create mode 100644 src/NexNet/README.md diff --git a/src/NexNet.Generator/README.md b/src/NexNet.Generator/README.md new file mode 100644 index 0000000..32d7c9d --- /dev/null +++ b/src/NexNet.Generator/README.md @@ -0,0 +1,39 @@ +This package is the NexNet source code generator for all client and server Nexus classes. + +NexNet is a .NET real-time asynchronous networking library, providing developers with the capability to seamlessly incorporate server and client bidirectional event-driven functionality into their applications. This framework streamlines the transmission of updates bidirectionally between server-side code and connected clients with resilient communication channels. + +## Features +- Automatic reconnection upon timeout or socket losing connection. +- High performance Socket and Pipeline usage. +- Multiple transports and easy extensibility. +- Server <-> Client communication + - Cancellable Invocations + - Streaming byte data via `INexusDuplexPipe` + - Streaming classes/structs data via `NexusChannel` + - Proxies can return: + - void for "fire and forget" invocation situations such as notifications. + - ValueTask whcih waiting for invocation completion. + - ValueTask which will return a value from the remote invocation method. +- Server can message multiple connected clients with a single invocation. +- Automatic reconnection of clients upon timeout or loss of connection. +- Thorough use of ValueTasks in hot paths for reduced invocation overhead. +- Ping system to detect timeouts from cline tand server side. +- No reflection. All hubs and proxies are created by the NexNet.Generator project. This allows for fast execution and easier tracing of bugs. +- Full asynchronous TPL useage throughout socket reading/writing, processing and execution of invocations and their return values. +- Minimal external package requirements. [MemoryPack](https://github.com/Cysharp/MemoryPack) + +## Transports Supported +- Unix Domain Sockets (UDS) +- TCP +- TLS over TCP +- QUIC (UDP) + +**Unix Domain Sockets** are the most efficient as they encounter the least overhead and is a good candidate for inter process communication. + +**TCP** allows for network and internet communication. Fastest option next to a UDS. + +**TLS over TCP** allows for TLS encryption provided by the SslStream on both the server and client. This is still fast, but not as fast as either prior options as it creates a Socket, wrapped by a Network stream wrapped by a SslStream. + +**QUIC (UDP)** s a UDP protocol which guarantees packet transmission, order and survives a connection IP and port change such as a connection switching from WiFi to celular. It requires the `libmsquic` library which can be installed on linux/unix based systems via the local app pacakge manager. Ubuntu: `sudo apt install libmsquic`. Must install the `NexNet.Quic` Nuget package to add the Quic transport. + +Additional transports can be added easily as long as the transports guarantees order and transmission. \ No newline at end of file diff --git a/src/NexNet.Quic/NexNet.Quic.csproj b/src/NexNet.Quic/NexNet.Quic.csproj index 5993a18..acc6cfa 100644 --- a/src/NexNet.Quic/NexNet.Quic.csproj +++ b/src/NexNet.Quic/NexNet.Quic.csproj @@ -1,6 +1,7 @@ - + + Quic transport protocol for NexNet. true diff --git a/src/NexNet.Quic/README.md b/src/NexNet.Quic/README.md new file mode 100644 index 0000000..5a6668b --- /dev/null +++ b/src/NexNet.Quic/README.md @@ -0,0 +1,39 @@ +This package adds the Quic transport protocol to NexNet. + +NexNet is a .NET real-time asynchronous networking library, providing developers with the capability to seamlessly incorporate server and client bidirectional event-driven functionality into their applications. This framework streamlines the transmission of updates bidirectionally between server-side code and connected clients with resilient communication channels. + +## Features +- Automatic reconnection upon timeout or socket losing connection. +- High performance Socket and Pipeline usage. +- Multiple transports and easy extensibility. +- Server <-> Client communication + - Cancellable Invocations + - Streaming byte data via `INexusDuplexPipe` + - Streaming classes/structs data via `NexusChannel` + - Proxies can return: + - void for "fire and forget" invocation situations such as notifications. + - ValueTask whcih waiting for invocation completion. + - ValueTask which will return a value from the remote invocation method. +- Server can message multiple connected clients with a single invocation. +- Automatic reconnection of clients upon timeout or loss of connection. +- Thorough use of ValueTasks in hot paths for reduced invocation overhead. +- Ping system to detect timeouts from cline tand server side. +- No reflection. All hubs and proxies are created by the NexNet.Generator project. This allows for fast execution and easier tracing of bugs. +- Full asynchronous TPL useage throughout socket reading/writing, processing and execution of invocations and their return values. +- Minimal external package requirements. [MemoryPack](https://github.com/Cysharp/MemoryPack) + +## Transports Supported +- Unix Domain Sockets (UDS) +- TCP +- TLS over TCP +- QUIC (UDP) + +**Unix Domain Sockets** are the most efficient as they encounter the least overhead and is a good candidate for inter process communication. + +**TCP** allows for network and internet communication. Fastest option next to a UDS. + +**TLS over TCP** allows for TLS encryption provided by the SslStream on both the server and client. This is still fast, but not as fast as either prior options as it creates a Socket, wrapped by a Network stream wrapped by a SslStream. + +**QUIC (UDP)** s a UDP protocol which guarantees packet transmission, order and survives a connection IP and port change such as a connection switching from WiFi to celular. It requires the `libmsquic` library which can be installed on linux/unix based systems via the local app pacakge manager. Ubuntu: `sudo apt install libmsquic`. Must install the `NexNet.Quic` Nuget package to add the Quic transport. + +Additional transports can be added easily as long as the transports guarantees order and transmission. \ No newline at end of file diff --git a/src/NexNet.props b/src/NexNet.props index 80c9fc2..548d0a5 100644 --- a/src/NexNet.props +++ b/src/NexNet.props @@ -16,8 +16,10 @@ true rpc sockets uds tcp tls quic secure source generator logo-128.png + README.md + \ No newline at end of file diff --git a/src/NexNet/NexNet.csproj b/src/NexNet/NexNet.csproj index 4fe09b4..10b50a6 100644 --- a/src/NexNet/NexNet.csproj +++ b/src/NexNet/NexNet.csproj @@ -5,7 +5,7 @@ enable $(DefineConstants);SOCKET_STREAM_BUFFERS;RANGES true - Communication system to two way communication between a single server and multiple clients. + A real-time asynchronous networking library that provides bidirectional communication between a server and multiple clients. diff --git a/src/NexNet/README.md b/src/NexNet/README.md new file mode 100644 index 0000000..15d625a --- /dev/null +++ b/src/NexNet/README.md @@ -0,0 +1,39 @@ +This package is the core functionality for NexNet. + +NexNet is a .NET real-time asynchronous networking library, providing developers with the capability to seamlessly incorporate server and client bidirectional event-driven functionality into their applications. This framework streamlines the transmission of updates bidirectionally between server-side code and connected clients with resilient communication channels. + +## Features +- Automatic reconnection upon timeout or socket losing connection. +- High performance Socket and Pipeline usage. +- Multiple transports and easy extensibility. +- Server <-> Client communication + - Cancellable Invocations + - Streaming byte data via `INexusDuplexPipe` + - Streaming classes/structs data via `NexusChannel` + - Proxies can return: + - void for "fire and forget" invocation situations such as notifications. + - ValueTask whcih waiting for invocation completion. + - ValueTask which will return a value from the remote invocation method. +- Server can message multiple connected clients with a single invocation. +- Automatic reconnection of clients upon timeout or loss of connection. +- Thorough use of ValueTasks in hot paths for reduced invocation overhead. +- Ping system to detect timeouts from cline tand server side. +- No reflection. All hubs and proxies are created by the NexNet.Generator project. This allows for fast execution and easier tracing of bugs. +- Full asynchronous TPL useage throughout socket reading/writing, processing and execution of invocations and their return values. +- Minimal external package requirements. [MemoryPack](https://github.com/Cysharp/MemoryPack) + +## Transports Supported +- Unix Domain Sockets (UDS) +- TCP +- TLS over TCP +- QUIC (UDP) + +**Unix Domain Sockets** are the most efficient as they encounter the least overhead and is a good candidate for inter process communication. + +**TCP** allows for network and internet communication. Fastest option next to a UDS. + +**TLS over TCP** allows for TLS encryption provided by the SslStream on both the server and client. This is still fast, but not as fast as either prior options as it creates a Socket, wrapped by a Network stream wrapped by a SslStream. + +**QUIC (UDP)** s a UDP protocol which guarantees packet transmission, order and survives a connection IP and port change such as a connection switching from WiFi to celular. It requires the `libmsquic` library which can be installed on linux/unix based systems via the local app pacakge manager. Ubuntu: `sudo apt install libmsquic`. Must install the `NexNet.Quic` Nuget package to add the Quic transport. + +Additional transports can be added easily as long as the transports guarantees order and transmission. \ No newline at end of file