VoltRpc 3.1.0

.NET 6.0 .NET Standard 2.0
NuGet\Install-Package VoltRpc -Version 3.1.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
dotnet add package VoltRpc --version 3.1.0
<PackageReference Include="VoltRpc" Version="3.1.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add VoltRpc --version 3.1.0
#r "nuget: VoltRpc, 3.1.0"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install VoltRpc as a Cake Addin
#addin nuget:?package=VoltRpc&version=3.1.0

// Install VoltRpc as a Cake Tool
#tool nuget:?package=VoltRpc&version=3.1.0

VoltRpc

License NuGet NuGet Download Count Build Status Docs Status Discord

VoltRpc - An RPC library which is designed to be both simple to use and fast.

Features

  • Its fast (See the benchmarks)
  • Supports all built-in C# value types, including:
    • Bool
    • Byte
    • Char
    • Decimal
    • Double
    • Float
    • Int
    • Long
    • SByte
    • Short
    • UInt
    • ULong
    • UShort
  • Supports these built-in .NET types: (More to be added)
    • String
    • DateTime
    • TimeSpan
    • Uri
    • Guid
  • Supports arrays for any type
  • Easily support custom types by implementing a TypeReadWriter<T>
  • Proxy generated by using a .NET Source Generator
  • Simple to use

Getting Started

Installation

VoltRpc can be installed from NuGet. You will also need the proxy generator (also on NuGet).

<ItemGroup>
    <PackageReference Include="VoltRpc" Version="3.0.0" />
    <PackageReference Include="VoltRpc.Proxy.Generator" Version="2.1.0" />
</ItemGroup>

Example

For a more in-depth example, see the Overview or Setup.

There is also a demo project included.

[GenerateProxy(GeneratedName = "TestProxy")]
public interface ITestInterface
{
  public void DoSomethingCool();
  public int GetTheCoolValue();
}

public class TestInterface : ITestInterface
{
  public void DoSomethingCool()
  {
    Console.WriteLine("Something Cool!");
  }

  public int GetTheCoolValue()
  {
    return 69;
  }
}

public class Program
{
  IPEndPoint ip = new(IPAddress.Loopback, 7767);

  TestInterface test = new();

  //Host
  Host host = new TCPHost(ip);
  host.AddService<ITestInterface>(test);
  host.StartListening().ConfigureAwait(false);

  //Client
  Client client = new TCPClient(ip);
  client.AddService<ITestInterface>();
  client.Connect();

  //Now we can call to method like it was normal C#
  TestProxy proxy = new(client);
  proxy.DoSomethingCool();
}

Benchmarks

BenchmarkDotNet=v0.13.1, OS=Windows 10.0.19044.1826 (21H2)
Intel Core i5-10600KF CPU 4.10GHz, 1 CPU, 12 logical and 6 physical cores
.NET SDK=6.0.302
  [Host]     : .NET 6.0.7 (6.0.722.32202), X64 RyuJIT
  Job-TDLHXN : .NET 6.0.7 (6.0.722.32202), X64 RyuJIT

Jit=Default  Platform=AnyCpu  Runtime=.NET 6.0  

Pipes Non-Array

Pipes Non-Array

(Currently, the in-built arrays are quite a lot slower, we are looking into fixing this in a later release)

Method message array Mean Error StdDev
BasicVoid ? ? 6.311 μs 0.0517 μs 0.0432 μs
BasicReturn ? ? 7.444 μs 0.0589 μs 0.0551 μs
ArrayReturn ? ? 21.389 μs 0.3943 μs 0.6695 μs
ArrayFast ? ? 1,579.432 μs 10.1223 μs 9.4684 μs
BasicParameterVoid Hello World! ? 7.128 μs 0.0390 μs 0.0346 μs
BasicParameterReturn Hello World! ? 8.287 μs 0.0364 μs 0.0304 μs
ArrayParameterVoid ? Byte[25] 18.423 μs 0.3675 μs 0.6140 μs
ArrayParameterReturn ? Byte[25] 28.647 μs 0.5643 μs 0.9112 μs
ArrayParameterVoid ? Byte[8294400] 2,705,942.687 μs 11,965.3253 μs 11,192.3727 μs
ArrayParameterReturn ? Byte[8294400] 5,416,337.679 μs 21,036.1040 μs 18,647.9583 μs

For more info on these benchmarks see Benchmarks.

Authors

Voltstro - Initial work - Voltstro

License

This project is licensed under the MIT license – see the LICENSE.md file for details.

Credits

Product Versions
.NET net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows
.NET Core netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1
.NET Standard netstandard2.0 netstandard2.1
.NET Framework net461 net462 net463 net47 net471 net472 net48
MonoAndroid monoandroid
MonoMac monomac
MonoTouch monotouch
Tizen tizen40 tizen60
Xamarin.iOS xamarinios
Xamarin.Mac xamarinmac
Xamarin.TVOS xamarintvos
Xamarin.WatchOS xamarinwatchos
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.
  • .NETStandard 2.1

    • No dependencies.
  • net6.0

    • No dependencies.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on VoltRpc:

Package Downloads
VoltRpc.Communication.Pipes

VoltRpc.Communication.Pipes - Provides named pipes (System.IO.Pipes) communication to VoltRpc.

VoltRpc.Proxy.Generator

VoltRpc.Proxy.Generator - Provides the REQUIRED .NET source generator for VoltRpc, used for generating proxy layers.

VoltRpc.Extension.Memory

VoltRpc.Extension.Memory - Extends VoltRpc's reader and writer with Span and Memory support.

VoltRpc.Extension.Vectors

VoltRpc.Extension.Vectors - Extends VoltRpc's reader and writer by supporting most System.Numerics.Vectors types. Also adds the higher-level type readers and writers.

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on VoltRpc:

Repository Stars
Voltstro-Studios/UnityWebBrowser
Functional web browser for Unity without any issues or hassle.
Version Downloads Last updated
3.1.0 35 9/20/2022
3.0.0 207 8/5/2022
2.1.0 230 5/22/2022
2.0.0 478 1/6/2022
1.3.0 289 12/30/2021
1.2.2 266 12/27/2021
1.2.1 255 12/27/2021
1.2.0 475 11/13/2021
1.1.1 567 8/7/2021
1.0.0 549 8/1/2021