一个面向 .NET 的高性能 RPC 框架(当前以 net10.0 为主),支持:
- Source Generator 自动生成
Proxy/Stub - 普通请求、单向调用(
[Oneway]) - 客户端流、服务端流、双向流、多流参数
- 协议级取消(
PacketType.Cancel) Microsoft.Extensions.Hosting托管集成- 可插拔传输层与序列化(当前默认 MemoryPack)
核心项目(src/):
SharpLink.Abstractions:协议常量、核心接口、会话与流管理抽象SharpLink.Runtime:基础运行时与传输实现(Socket/NamedPipe/AnonymousPipe)SharpLink.Sdk:Builder 与易用扩展(传输/配置入口)SharpLink.Client:客户端通道与请求管理SharpLink.Server:服务端连接管理、分发、心跳与取消处理SharpLink.Hosting:IServiceCollection扩展与 HostedService 集成SharpLink.Generator:[RpcService]生成器与编译期诊断SharpLink.Serializer.MemoryPack:MemoryPack 序列化适配
示例(demo/):
HelloWorld:基础调用(多参数/多类型)Streaming:流式调用(单向/双向/多流)HostApplication:Host 模式完整示例Cancel:协议级取消示例OnwWay:单向调用示例(目录名按当前仓库保持OnwWay)Log:日志配置示例(默认静默 +UseLogging开启ILogger)
基准(test/SharpLink.Benchmarks):
- Unary 场景:
Add/Echo/Payload/Array/List/Memory/Oneway - Streaming 场景:上传流/下载流/双向流/多流合并
环境要求:
- .NET SDK
10.0(与仓库当前 TFM 对齐)
构建:
dotnet build -v minimal运行示例:
dotnet run --project demo/HelloWorld
dotnet run --project demo/Streaming
dotnet run --project demo/HostApplication
dotnet run --project demo/Cancel
dotnet run --project demo/OnwWay
dotnet run --project demo/Log
# split contract/server/client (run server first)
dotnet run --project demo/SeparatedServer
dotnet run --project demo/SeparatedClient- RPC contract interfaces must be marked with
[RpcContract]. - RPC service classes must be marked with
[RpcService]. - By default, the generator scans referenced assemblies that reference
SharpLink.Sdk. - You can override scan scope with an assembly-level attribute:
[assembly: SharpLinkRpcContracts(typeof(MyContract1), typeof(MyContract2))]- The attribute above limits reference scanning to the assemblies that contain those contract types.
运行基准:
dotnet run -c Release --project test/SharpLink.Benchmarks
# 或直接过滤
dotnet run -c Release --project test/SharpLink.Benchmarks -- --filter *UnaryBenchmarks*
dotnet run -c Release --project test/SharpLink.Benchmarks -- --filter *StreamingBenchmarks*SharpLink.Hosting 提供 IServiceCollection 扩展:
AddSharplinkServer(...)AddSharplinkClient(...)
你可以在同一个 Host 中同时挂载 Server + Client,也可以拆分为独立进程。
- 日志:
UseLogging(...)/UseLoggerFactory(...) - BufferWriter 池:
UseBufferWriterPool(...)
var server = SharplinkServerBuilder.Create()
.UseBufferWriterPool(o =>
{
o.InitialCapacity = 1024;
o.MaxPooledWriters = 512;
o.MaxRetainedCapacityBytes = 64 * 1024;
});- 计划:
doc/plan.md - 架构:
doc/architecture.md - 待办与问题:
doc/todo.md - 压测:
doc/loadtest.md - 贡献指南:
CONTRIBUTING.md - 社区行为准则:
CODE_OF_CONDUCT.md - 更新日志:
CHANGELOG.md