VoltRpc.Communication.Pipes 2.0.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package VoltRpc.Communication.Pipes --version 2.0.1                
NuGet\Install-Package VoltRpc.Communication.Pipes -Version 2.0.1                
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.
<PackageReference Include="VoltRpc.Communication.Pipes" Version="2.0.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add VoltRpc.Communication.Pipes --version 2.0.1                
#r "nuget: VoltRpc.Communication.Pipes, 2.0.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install VoltRpc.Communication.Pipes as a Cake Addin
#addin nuget:?package=VoltRpc.Communication.Pipes&version=2.0.1

// Install VoltRpc.Communication.Pipes as a Cake Tool
#tool nuget:?package=VoltRpc.Communication.Pipes&version=2.0.1                

VoltRpc

License NuGet NuGet Download Count Build Status Docs Status Discord

VoltRpc - Library designed for high performance RPC communication.

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
  • 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 can use the command below to install the package.

Install-Package VoltRpc

Proxy Generation

All proxy generation is handled by a .NET Source generator. You will need to install it's NuGet package.

You can use the command below to install the package.

Install-Package VoltRpc.Proxy.Generator

Example

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

There is also a demo project included.

Shared:

using VoltRpc.Proxy;

namespace VoltRpcExample.Shared
{
    [GenerateProxy(GeneratedName = "TestProxy")]
    public interface ITest
    {
        public void Basic();

        public string Hello();
    }
}

Host:

using System;
using System.Net;
using VoltRpc.Communication;
using VoltRpc.Communication.TCP;
using VoltRpcExample.Shared;

namespace VoltRpcExample
{
    public class Program
    {
        public static void Main()
        {
            Host host = new TCPHost(new IPEndPoint(IPAddress.Loopback, 7767));
            host.AddService<ITest>(new TestImpl());
            host.StartListening();

            Console.WriteLine("Press any key to stop...");
            Console.ReadKey();

            host.Dispose();
        }

        public class TestImpl : ITest
        {
            public void Basic()
            {
                Console.WriteLine("Hello!");
            }

            public string Hello()
            {
                return "Hello World!";
            }
        }
    }
}

Client:

using System;
using System.Net;
using VoltRpc.Communication.TCP;
using VoltRpc.Proxy.Generated;
using VoltRpcExample.Shared;

namespace VoltRpcExample.Client
{
    public class Program
    {
        public static void Main()
        {
            VoltRpc.Communication.Client client = new TCPClient(new IPEndPoint(IPAddress.Loopback, 7767));
            client.AddService<ITest>();
            client.Connect();

            ITest testProxy = new TestProxy(client);
            testProxy.Basic();
            Console.WriteLine($"Got from server: {testProxy.Hello()}");

            Console.WriteLine("Press any key to quit...");
            Console.ReadKey();

            client.Dispose();
        }
    }
}

Benchmarks

BenchmarkDotNet=v0.13.1, OS=ubuntu 21.10
Intel Core i5-10600KF CPU 4.10GHz, 1 CPU, 12 logical and 6 physical cores
.NET SDK=6.0.100
  [Host]     : .NET 6.0.0 (6.0.21.52210), X64 RyuJIT
  Job-YXCTJF : .NET 6.0.0 (6.0.21.52210), X64 RyuJIT

Jit=Default  Platform=AnyCpu  

Pipes Benchmark

Method array arraySize message Mean Error StdDev
BasicVoid ? ? ? 8.540 μs 0.1634 μs 0.2125 μs
BasicReturn ? ? ? 9.488 μs 0.1218 μs 0.1080 μs
ArrayReturn ? ? ? 9.528 μs 0.1653 μs 0.1546 μs
ArrayParameterVoid ? 25 ? 9.233 μs 0.0999 μs 0.0885 μs
ArrayParameterReturn ? 25 ? 9.427 μs 0.1529 μs 0.1636 μs
ArrayParameterVoid ? 8294400 ? 9.290 μs 0.1106 μs 0.0924 μs
ArrayParameterReturn ? 8294400 ? 9.631 μs 0.1637 μs 0.1531 μs
BasicParameterVoid ? ? Hello World! 9.358 μs 0.1194 μs 0.1116 μs
BasicParameterReturn ? ? Hello World! 9.891 μs 0.1478 μs 0.1383 μ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 Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 is compatible. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
3.1.0 844 1/24/2024
3.0.0 1,649 8/5/2022
2.0.1 1,659 5/22/2022
2.0.0 1,532 1/6/2022
1.2.1 1,554 12/30/2021
1.2.0 1,666 11/13/2021
1.1.0 1,767 8/7/2021
1.0.0 1,718 8/1/2021