Skip to content

Commit

Permalink
Added readme for each nuget package.
Browse files Browse the repository at this point in the history
Added NuGet description for Quic package.
  • Loading branch information
DJGosnell committed Sep 17, 2023
1 parent 9d98e6a commit fb93c0e
Show file tree
Hide file tree
Showing 6 changed files with 122 additions and 2 deletions.
39 changes: 39 additions & 0 deletions src/NexNet.Generator/README.md
Original file line number Diff line number Diff line change
@@ -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<T>`
- Proxies can return:
- void for "fire and forget" invocation situations such as notifications.
- ValueTask whcih waiting for invocation completion.
- ValueTask<T> 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.
3 changes: 2 additions & 1 deletion src/NexNet.Quic/NexNet.Quic.csproj
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\NexNet.props" />
<PropertyGroup>
<Description>Quic transport protocol for NexNet.</Description>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
</PropertyGroup>
<ItemGroup>
Expand Down
39 changes: 39 additions & 0 deletions src/NexNet.Quic/README.md
Original file line number Diff line number Diff line change
@@ -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<T>`
- Proxies can return:
- void for "fire and forget" invocation situations such as notifications.
- ValueTask whcih waiting for invocation completion.
- ValueTask<T> 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.
2 changes: 2 additions & 0 deletions src/NexNet.props
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<PackageTags>rpc sockets uds tcp tls quic secure source generator</PackageTags>
<PackageIcon>logo-128.png</PackageIcon>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>
<ItemGroup>
<None Include="../../docs/images/logo-128.png" Pack="True" PackagePath="/" />
<None Include="README.md" Pack="True" PackagePath="/" />
</ItemGroup>
</Project>
2 changes: 1 addition & 1 deletion src/NexNet/NexNet.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<Nullable>enable</Nullable>
<DefineConstants>$(DefineConstants);SOCKET_STREAM_BUFFERS;RANGES</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Description>Communication system to two way communication between a single server and multiple clients.</Description>
<Description>A real-time asynchronous networking library that provides bidirectional communication between a server and multiple clients.</Description>
</PropertyGroup>
<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
Expand Down
39 changes: 39 additions & 0 deletions src/NexNet/README.md
Original file line number Diff line number Diff line change
@@ -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<T>`
- Proxies can return:
- void for "fire and forget" invocation situations such as notifications.
- ValueTask whcih waiting for invocation completion.
- ValueTask<T> 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.

0 comments on commit fb93c0e

Please sign in to comment.