# C# 高性能服务器开发开源项目深度调研报告
## 目录
1. [项目总览](#1-项目总览)
2. [Web框架对比](#2-web框架对比)
3. [高性能网络库对比](#3-高性能网络库对比)
4. [Actor模型框架对比](#4-actor模型框架对比)
5. [游戏服务器框架对比](#5-游戏服务器框架对比)
6. [微服务框架对比](#6-微服务框架对比)
7. [消息总线对比](#7-消息总线对比)
8. [RPC框架对比](#8-rpc框架对比)
9. [序列化库对比](#9-序列化库对比)
10. [数据访问层对比](#10-数据访问层对比)
11. [HTTP客户端对比](#11-http客户端对比)
12. [综合选型建议](#12-综合选型建议)
---
## 1. 项目总览
### 1.1 全部项目速查表
| 类别 | 项目名称 | GitHub Stars | 许可证 | 维护状态 | 核心特性 |
|------|----------|--------------|--------|----------|----------|
| **Web框架** | ASP.NET Core | 37.7k | MIT | 活跃 | 官方框架,跨平台,Kestrel服务器 |
| | FastEndpoints | 5.8k | MIT | 活跃 | REPR模式,比MVC快13% |
| | Carter | 2.4k | MIT | 活跃 | Nancy风格,Minimal APIs扩展 |
| **网络库** | DotNetty | 4.2k | MIT | 低维护 | Netty移植,事件驱动 |
| | NetCoreServer | 3.1k | MIT | 活跃 | 超低延迟,C10K解决方案 |
| | SuperSocket | 4.2k | Apache-2.0 | 活跃 | 灵活Pipeline架构 |
| | SpanNetty | 316 | MIT | 中等 | 零拷贝优化 |
| **Actor模型** | Orleans | 10.7k | MIT | 活跃 | 虚拟Actor,微软出品 |
| | Akka.NET | 5k | Apache-2.0 | 活跃 | 完整Actor模型,流处理 |
| | Proto.Actor | 1.9k | Apache-2.0 | 活跃 | 超高性能,跨语言 |
| **游戏服务器** | Mirror | 3k+ | MIT | 活跃 | Unity #1网络库 |
| | DarkRift | 1k+ | MIT | 活跃 | 双通道TCP+UDP |
| | Riptide | 1.3k | MIT | 活跃 | 轻量级多人游戏 |
| | Nakama | 12.2k | Apache-2.0 | 活跃 | 完整游戏后端(Go) |
| **微服务** | Dapr SDK | - | Apache-2.0 | 活跃 | CNCF毕业,Sidecar架构 |
| | Ocelot | 8.7k | Apache-2.0 | 活跃 | API网关 |
| | Steeltoe | 1.1k | Apache-2.0 | 活跃 | Spring生态集成 |
| | Service Fabric | 273 | 专有 | 维护中 | Azure原生 |
| **消息总线** | MassTransit | 7.7k | Apache-2.0 | 活跃 | 多传输支持,Saga |
| | NServiceBus | 2.2k | RPL 1.5 | 活跃 | 企业级,商业支持 |
| | CAP | 7.1k | MIT | 活跃 | 分布式事务+EventBus |
| | Rebus | 2.6k | MIT | 活跃 | 轻量级,简单易用 |
| | EasyNetQ | 3k | MIT | 活跃 | RabbitMQ专用 |
| | Brighter | 2.4k | MIT | 活跃 | 命令处理器模式 |
| **RPC** | gRPC.NET | 4.2k | Apache-2.0 | 活跃 | 官方gRPC支持 |
| | MagicOnion | 4.3k | MIT | 活跃 | Code-First gRPC |
| **序列化** | MemoryPack | - | MIT | 活跃 | 最快,零编码 |
| | MessagePack | - | MIT | 活跃 | 成熟稳定,跨语言 |
| | Protobuf.NET | 4.5k | Apache-2.0 | 活跃 | Protocol Buffers |
| | System.Text.Json | 内置 | MIT | 活跃 | .NET官方JSON |
| **数据访问** | Dapper | 17.5k | Apache-2.0 | 活跃 | 最快Micro-ORM |
| | EF Core | 14k+ | MIT | 活跃 | 官方全功能ORM |
| | RepoDb | 1.6k | Apache-2.0 | 活跃 | 混合ORM |
| | Linq2Db | 3.3k | MIT | 活跃 | 高性能LINQ |
| **HTTP客户端** | Refit | 8.5k | MIT | 活跃 | 类型安全,编译时生成 |
| | Flurl | 4.4k | MIT | 活跃 | 流畅API |
| | RestSharp | 9.5k | Apache-2.0 | 活跃 | 功能丰富 |
| | YARP | 9k+ | MIT | 活跃 | 微软反向代理 |
---
## 2. Web框架对比
### 2.1 性能基准测试 (TechEmpower Round 23)
| 框架 | Plaintext (req/s) | JSON (req/s) | 单查询 (req/s) | 冷启动 |
|------|-------------------|--------------|----------------|--------|
| **ASP.NET Core (.NET 9)** | 27,530,836 | 2,546,481 | 844,156 | ~11-17ms |
| FastEndpoints | ~254,103* | ~254,103* | - | ~30-35ms |
| MVC Controller | ~224,799* | ~224,799* | - | ~17-24ms |
*Bombardier测试数据
### 2.2 功能对比
| 特性 | ASP.NET Core | FastEndpoints | Carter | MVC Controller |
|------|-------------|---------------|--------|----------------|
| 性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 学习曲线 | 中 | 低 | 低 | 高 |
| 功能丰富度 | 最高 | 高 | 中 | 最高 |
| Native AOT | ✅ | ✅ | ❌ | ❌ |
| 内置验证 | ✅ | ✅ | ❌(FluentValidation) | ✅ |
| OpenAPI | ✅ | ✅ | ✅ | ✅ |
| SignalR | ✅ | ❌ | ❌ | ✅ |
| 最小API风格 | ✅ | ✅ | ✅ | ❌ |
### 2.3 选型建议
| 场景 | 推荐 |
|------|------|
| 企业级全功能应用 | ASP.NET Core MVC |
| 高性能微服务/API | FastEndpoints 或 Minimal APIs |
| Nancy风格爱好者 | Carter |
| 需要实时通信 | ASP.NET Core + SignalR |
---
## 3. 高性能网络库对比
### 3.1 性能基准测试
| 框架 | TCP吞吐量 | 延迟 | 协议支持 | C10K支持 |
|------|-----------|------|----------|----------|
| **NetCoreServer** | 9.4M msg/s | 106ns | TCP/UDP/WS/HTTP/SSL | ✅ |
| SpanNetty | 181K msg/s | - | TCP/UDP/WS/HTTP2 | ✅ |
| DotNetty | - | - | TCP/UDP/WS/HTTP2 | ✅ |
| SuperSocket | - | - | TCP/UDP/WS | ✅ |
### 3.2 功能对比
| 特性 | NetCoreServer | DotNetty | SuperSocket | SpanNetty |
|------|---------------|----------|-------------|-----------|
| 性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 零拷贝 | 部分 | ❌ | ✅ | ✅ |
| Pipeline架构 | ❌ | ✅ | ✅ | ✅ |
| 维护状态 | 活跃 | 低维护 | 活跃 | 中等 |
| 协议扩展 | 中等 | 高 | 高 | 高 |
| 文档质量 | 高 | 高 | 高 | 中 |
### 3.3 选型建议
| 场景 | 推荐 |
|------|------|
| 极致性能需求 | NetCoreServer |
| 需要Netty风格API | SpanNetty (现代) / DotNetty (稳定) |
| 灵活协议扩展 | SuperSocket |
| 游戏/IM服务器 | SuperSocket 或 NetCoreServer |
---
## 4. Actor模型框架对比
### 4.1 性能基准测试 (Etteplan 2022)
| 框架 | 消息吞吐量 | Actor激活 | 内存效率 |
|------|------------|-----------|----------|
| **Proto.Actor** | 最高 | 最快 | 中等 |
| Akka.NET | 高 | 快 | 中等 |
| Orleans | 中等 | 较慢 | **最高** |
| Dapr Actors | 较低 | 慢 | 低 |
### 4.2 架构对比
| 特性 | Orleans | Akka.NET | Proto.Actor |
|------|---------|----------|-------------|
| 模型类型 | 虚拟Actor | 经典Actor | 经典Actor |
| 生命周期 | 自动管理 | 显式控制 | 显式控制 |
| 学习曲线 | 低 | 高 | 中 |
| 分布式支持 | 内置 | Akka.Cluster | gRPC |
| 持久化 | 内置 | Akka.Persistence | 需自建 |
| 流处理 | 有限 | Akka.Streams | 有限 |
| 跨语言 | ❌ | ❌ | ✅ (Go/Java) |
| 企业支持 | 微软 | Lightbend | 社区 |
### 4.3 选型建议
| 场景 | 推荐 |
|------|------|
| 云原生分布式应用 | Orleans |
| 高并发流处理/事件溯源 | Akka.NET |
| 极致性能+跨语言 | Proto.Actor |
| IoT数字孪生 | Orleans |
| 电信/实时消息 | Akka.NET |
---
## 5. 游戏服务器框架对比
### 5.1 功能对比
| 框架 | 类型 | 协议 | Unity支持 | CCU限制 | 集群支持 |
|------|------|------|-----------|---------|----------|
| **Mirror** | Unity网络库 | UDP/TCP/WS/Steam | ✅ 原生 | 无 | 有限 |
| DarkRift | 独立网络库 | TCP+UDP | ✅ | 无 | ✅ |
| Riptide | 轻量网络库 | UDP/TCP | ✅ | 无 | ❌ |
| Nakama | 完整后端 | HTTP/WS | ✅ SDK | 无 | ✅ |
| NetCoreServer | Socket库 | TCP/UDP/WS | 需自建 | 无 | 需自建 |
### 5.2 性能特点
| 框架 | 延迟 | 吞吐量 | 内存效率 | 开发效率 |
|------|------|--------|----------|----------|
| Mirror | 低 | 中 | 高 | ⭐⭐⭐⭐⭐ |
| DarkRift | 低 | 高 | 高 | ⭐⭐⭐⭐ |
| Riptide | 极低 | 中 | 极高 | ⭐⭐⭐⭐ |
| Nakama | 中 | 高 | 中 | ⭐⭐⭐⭐⭐ |
### 5.3 选型建议
| 场景 | 推荐 |
|------|------|
| Unity多人游戏 | Mirror (首选) |
| 权威服务器架构 | DarkRift |
| 轻量级快速开发 | Riptide |
| 需要完整后端服务 | Nakama |
| 自定义高性能服务器 | NetCoreServer |
---
## 6. 微服务框架对比
### 6.1 功能对比
| 特性 | Dapr | Ocelot | Steeltoe | Service Fabric |
|------|------|--------|----------|----------------|
| 类型 | 运行时 | API网关 | 框架 | 平台 |
| Sidecar架构 | ✅ | ❌ | ❌ | ❌ |
| 多语言支持 | ✅ | ❌ | ❌ | ❌ |
| 服务发现 | ✅ | ✅ | ✅ | ✅ |
| 状态管理 | ✅ | ❌ | ❌ | ✅ |
| Actor模型 | ✅ | ❌ | ❌ | ✅ |
| 发布订阅 | ✅ | ❌ | ❌ | ✅ |
| 云厂商锁定 | 无 | 无 | Spring/Azure | Azure |
| CNCF状态 | 毕业 | - | - | - |
### 6.2 选型建议
| 场景 | 推荐 |
|------|------|
| 云原生/多语言 | Dapr |
| 简单API网关 | Ocelot |
| Spring生态集成 | Steeltoe |
| Azure深度绑定 | Service Fabric |
| 混合云部署 | Dapr |
---
## 7. 消息总线对比
### 7.1 功能对比
| 特性 | MassTransit | NServiceBus | CAP | Rebus | EasyNetQ |
|------|-------------|-------------|-----|-------|----------|
| 开源/商业 | 开源 | 商业(开源核心) | 开源 | 开源 | 开源 |
| RabbitMQ | ✅ | ✅ | ✅ | ✅ | ✅ (专用) |
| Kafka | ✅ | ✅ | ✅ | ✅ | ❌ |
| Azure SB | ✅ | ✅ | ✅ | ✅ | ❌ |
| SQS/SNS | ✅ | ✅ | ❌ | ✅ | ❌ |
| Saga支持 | ✅ | ✅ | ❌ | ✅ | ❌ |
| 分布式事务 | ❌ | ❌ | ✅ | ❌ | ❌ |
| 商业支持 | 可选 | 24x7 | ❌ | 可选 | ❌ |
### 7.2 选型建议
| 场景 | 推荐 |
|------|------|
| 开源首选 | MassTransit |
| 企业级/需要SLA | NServiceBus |
| 分布式事务 | CAP |
| 简单RabbitMQ | EasyNetQ |
| 轻量级方案 | Rebus |
---
## 8. RPC框架对比
### 8.1 功能对比
| 特性 | gRPC.NET | MagicOnion |
|------|----------|------------|
| 协议定义 | .proto文件 | C#接口 |
| 序列化 | Protobuf | MessagePack |
| 传输 | HTTP/2 | HTTP/2 |
| 双向流 | ✅ | ✅ |
| Unity客户端 | 需插件 | ✅ 原生 |
| 实时通信 | 需SignalR | ✅ 内置 |
| 学习曲线 | 中 | 低 |
### 8.2 选型建议
| 场景 | 推荐 |
|------|------|
| 标准微服务RPC | gRPC.NET |
| Unity游戏后端 | MagicOnion |
| 需要.proto跨语言 | gRPC.NET |
| C#全栈开发 | MagicOnion |
---
## 9. 序列化库对比
### 9.1 性能基准测试
| 库 | 序列化 (ns) | 反序列化 (ns) | 输出大小 |
|----|-------------|---------------|----------|
| **MemoryPack** | ~20 | ~20 | 中等 |
| MessagePack (IntKey) | 84 | 73 | 95 B |
| MessagePack (StringKey) | 127 | 218 | 较大 |
| Protobuf.NET | 176 | 266 | 97 B |
| Hyperion | 280 | 366 | 中等 |
| System.Text.Json | 276 | 420 | 148 B |
| Newtonsoft.Json | 1,433 | 2,783 | 148 B |
### 9.2 功能对比
| 特性 | MemoryPack | MessagePack | Protobuf | System.Text.Json |
|------|------------|-------------|----------|------------------|
| 性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 跨语言 | 有限 | ✅ | ✅ | ✅ |
| 版本容忍 | 有限 | ✅ | ✅ | ✅ |
| AOT支持 | ✅ | ✅ | ✅ | ✅ |
| 无需属性 | ✅ | ❌ | ❌ | ❌ |
### 9.3 选型建议
| 场景 | 推荐 |
|------|------|
| 极致性能 | MemoryPack |
| 跨语言兼容 | MessagePack 或 Protobuf |
| gRPC集成 | Protobuf |
| 无需外部依赖 | System.Text.Json |
| 游戏/缓存 | MemoryPack |
---
## 10. 数据访问层对比
### 10.1 性能基准测试
| 操作 | Dapper | EF Core 9 | RepoDb | Linq2Db |
|------|--------|-----------|--------|---------|
| 单条查询 | 1.166 ms | 1.200 ms | ~1.1 ms | ~1.2 ms |
| 列表查询 | 5.643 ms | 5.862 ms | ~5.5 ms | ~5.8 ms |
| 批量插入(10k) | ~22.5 ms | ~45 ms | ~20 ms | ~25 ms |
| 内存使用 | 13 KB | 20 KB | ~12 KB | ~15 KB |
### 10.2 功能对比
| 特性 | Dapper | EF Core | RepoDb | Linq2Db |
|------|--------|---------|--------|---------|
| 类型 | Micro-ORM | Full-ORM | 混合ORM | LINQ-ORM |
| 变更跟踪 | ❌ | ✅ | 可选 | ❌ |
| 迁移系统 | ❌ | ✅ | ❌ | ❌ |
| LINQ支持 | 有限 | ✅ | 有限 | ✅ |
| 批量操作 | 基础 | ✅ | ✅ | ✅ |
| 多数据库 | ✅ | ✅ | ✅ | ✅ |
### 10.3 选型建议
| 场景 | 推荐 |
|------|------|
| 极致读取性能 | Dapper |
| 企业级快速开发 | EF Core |
| 批量数据处理 | RepoDb |
| 复杂LINQ查询 | Linq2Db |
| 混合架构 | EF Core + Dapper |
---
## 11. HTTP客户端对比
### 11.1 性能基准测试
| 库 | 平均时间 (μs) | 内存分配 (KB) |
|----|---------------|---------------|
| HttpClient (原生) | 287.9 | 314.01 |
| **Refit** | 265.0 | 476.11 |
| Flurl | 283.2 | 713.25 |
| RestSharp | 320.2 | 1,335.93 |
### 11.2 功能对比
| 特性 | Refit | Flurl | RestSharp | HttpClient |
|------|-------|-------|-----------|------------|
| 性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 类型安全 | ✅ | ❌ | ❌ | ❌ |
| 易用性 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 灵活性 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
### 11.3 选型建议
| 场景 | 推荐 |
|------|------|
| 类型安全API客户端 | Refit |
| 简洁流畅语法 | Flurl |
| 复杂HTTP场景 | RestSharp |
| 极致性能 | HttpClient |
| API网关/反向代理 | YARP |
---
## 12. 综合选型建议
### 12.1 按应用场景选型
#### 场景1: 高性能Web API / 微服务
```
推荐技术栈:
├── 框架: FastEndpoints 或 ASP.NET Core Minimal APIs
├── 序列化: MemoryPack (内部) / MessagePack (跨服务)
├── 数据访问: Dapper (读取) + EF Core (写入)
├── RPC: gRPC.NET
├── 消息总线: MassTransit
└── HTTP客户端: Refit
```
#### 场景2: 实时多人游戏服务器
```
推荐技术栈:
├── 网络库: Mirror (Unity) 或 NetCoreServer (独立)
├── 序列化: MemoryPack
├── 数据访问: Dapper
├── 分布式: Orleans (状态管理)
└── 缓存: StackExchange.Redis
```
#### 场景3: 分布式企业应用
```
推荐技术栈:
├── 框架: ASP.NET Core
├── Actor模型: Orleans
├── 消息总线: NServiceBus 或 CAP
├── 数据访问: EF Core
├── API网关: Ocelot 或 YARP
└── 服务网格: Dapr
```
#### 场景4: IoT / 高并发系统
```
推荐技术栈:
├── 框架: ASP.NET Core + SignalR
├── 网络库: NetCoreServer
├── Actor模型: Proto.Actor 或 Akka.NET
├── 消息总线: MassTransit + Kafka
├── 序列化: MemoryPack
└── 时序数据: TimescaleDB + Dapper
```
#### 场景5: 事件溯源 / CQRS系统
```
推荐技术栈:
├── 框架: ASP.NET Core
├── Actor模型: Akka.NET
├── 事件存储: Marten 或 KurrentDB
├── 消息总线: MassTransit
├── 读模型: Dapper + PostgreSQL
└── 序列化: MessagePack
```
### 12.2 技术选型决策树
```
开始选型
│
├── 需要Web UI?
│ ├── 是 → ASP.NET Core + Blazor/MVC
│ └── 否 → 纯API服务
│
├── 需要实时通信?
│ ├── 是 → SignalR 或 WebSocket库
│ └── 否 → HTTP/gRPC
│
├── 需要高并发Actor?
│ ├── 云原生/易用 → Orleans
│ ├── 完整控制 → Akka.NET
│ └── 极致性能 → Proto.Actor
│
├── 需要消息队列?
│ ├── 开源首选 → MassTransit
│ ├── 企业级 → NServiceBus
│ └── 分布式事务 → CAP
│
├── 性能优先的数据访问?
│ ├── 读取密集 → Dapper
│ ├── 复杂业务 → EF Core
│ └── 批量操作 → RepoDb
│
└── 序列化需求?
├── 极致性能 → MemoryPack
├── 跨语言 → MessagePack/Protobuf
└── 简单易用 → System.Text.Json
```
### 12.3 避坑指南
| 避免使用 | 替代方案 | 原因 |
|----------|----------|------|
| BinaryFormatter | MemoryPack | 安全漏洞,已弃用 |
| SpanJson | System.Text.Json | 已归档,不再维护 |
| ZeroFormatter | MemoryPack | 维护模式,已被取代 |
| 每请求new HttpClient | IHttpClientFactory | 端口耗尽 |
| MVC处理简单API | Minimal APIs | 性能差37% |
| DotNetty (新项目) | SpanNetty | 维护不活跃 |
### 12.4 性能优化检查清单
- [ ] 使用Native AOT编译 (.NET 8+)
- [ ] 启用连接池和连接复用
- [ ] 使用AsNoTracking()进行只读查询
- [ ] 使用编译查询避免重复编译
- [ ] 选择高性能序列化器 (MemoryPack/MessagePack)
- [ ] 使用Span<T>和Memory<T>减少分配
- [ ] 配置PooledConnectionLifetime
- [ ] 启用响应压缩
- [ ] 使用BenchmarkDotNet进行基准测试
- [ ] 监控GC和内存分配
---
## 附录: 项目链接汇总
### 官方框架
- ASP.NET Core: https://github.com/dotnet/aspnetcore
- Orleans: https://github.com/dotnet/orleans
- YARP: https://github.com/dotnet/yarp
### 网络库
- NetCoreServer: https://github.com/chronoxor/NetCoreServer
- SuperSocket: https://github.com/kerryjiang/SuperSocket
- DotNetty: https://github.com/Azure/DotNetty
### Actor模型
- Akka.NET: https://github.com/akkadotnet/akka.net
- Proto.Actor: https://github.com/asynkron/protoactor-dotnet
### 游戏服务器
- Mirror: https://github.com/MirrorNetworking/Mirror
- DarkRift: https://github.com/DarkRiftNetworking/DarkRift
- Riptide: https://github.com/RiptideNetworking/Riptide
- Nakama: https://github.com/heroiclabs/nakama
### 微服务/消息
- Dapr: https://github.com/dapr/dotnet-sdk
- MassTransit: https://github.com/MassTransit/MassTransit
- NServiceBus: https://github.com/Particular/NServiceBus
- CAP: https://github.com/dotnetcore/CAP
- Ocelot: https://github.com/ThreeMammals/Ocelot
### RPC/序列化
- MagicOnion: https://github.com/Cysharp/MagicOnion
- MemoryPack: https://github.com/Cysharp/MemoryPack
- MessagePack: https://github.com/MessagePack-CSharp/MessagePack-CSharp
- gRPC.NET: https://github.com/grpc/grpc-dotnet
### 数据访问
- Dapper: https://github.com/DapperLib/Dapper
- EF Core: https://github.com/dotnet/efcore
- RepoDb: https://github.com/mikependon/RepoDB
- Linq2Db: https://github.com/linq2db/linq2db
### Web框架
- FastEndpoints: https://github.com/FastEndpoints/FastEndpoints
- Carter: https://github.com/CarterCommunity/Carter
### HTTP客户端
- Refit: https://github.com/reactiveui/refit
- Flurl: https://github.com/tmenier/Flurl
- RestSharp: https://github.com/restsharp/RestSharp
---
*报告生成日期: 2025年2月*
*基于GitHub Stars、官方文档、基准测试数据和社区反馈*
登录后可参与表态
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!