VoltRpc - An RPC library which is designed to be both simple to use and fast.
- 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
Vector2
Vector3
Vector4
Plane
Quaternion
Matrix3x2
Matrix4x4
- 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
VoltRpc can be installed from NuGet. You will also need the proxy generator (also on NuGet).
<ItemGroup>
<PackageReference Include="VoltRpc" Version="3.2.0" />
<PackageReference Include="VoltRpc.Proxy.Generator" Version="2.3.0" />
</ItemGroup>
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();
}
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
(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.
Voltstro - Initial work - Voltstro
This project is licensed under the MIT license – see the LICENSE.md file for details.
- Mirror
NetworkReader.cs
used as a base forBufferedReader.cs
NetworkWriter.cs
used as a base forBufferedWriter.cs
- Parts of
BufferedStream.cs
from the .NET Runtime was also used in the reader.