SAEA - 高性能网络通信框架家族 🚀

English Version | 中文版
基于 .NET Standard 2.0 的跨平台高性能网络通信框架,底层异步 IO 由 .NET 运行时按操作系统自动选择(Windows IOCP / Linux epoll / macOS kqueue);收发路径统一为零拷贝(Span/Memory)+ 内存池化复用,提供完整的网络应用解决方案。
SAEA.Socket 是一个跨平台高性能 sockets 网络框架,Src 中包含其使用场景,例如大文件传输、WebSocket 客户端和服务器、高性能消息队列、RPC、Redis 驱动、HTTP Server、MQTT、MVC、DNS、消息服务器等。
快速导航 🧭
30秒快速开始 ⚡
方式 1: 安装核心 Socket 框架
dotnet add package SAEA.Sockets
// 创建 TCP 服务器(仅需5行代码)
var server = SocketFactory.CreateServerSocket(
SocketOptionBuilder.Instance.SetSocket(SAEASocketType.Tcp).UseIocp().SetPort(39654).Build()
);
server.OnServerReceiveSpan += (userToken, data) => server.Send(userToken.ID, data);
server.Start();
💡 OnServerReceiveSpan 的 data 为 ReadOnlySpan<byte>,仅在回调期间有效,请在同一次回调内同步消费(或 ToArray() 复制)。
方式 2: 选择适合你的组件
根据你的需求选择对应组件:
| 你的需求 |
推荐组件 |
安装命令 |
| Web API 开发 |
SAEA.MVC |
dotnet add package SAEA.MVC |
| WebSocket 实时通信 |
SAEA.WebSocket |
dotnet add package SAEA.WebSocket |
| P2P 直连通信 |
SAEA.P2P |
dotnet add package SAEA.P2P |
| Redis 缓存操作 |
SAEA.RedisSocket |
dotnet add package SAEA.RedisSocket |
| 微服务 RPC |
SAEA.RPC |
dotnet add package SAEA.RPC |
| IoT 设备通信 |
SAEA.MQTT |
dotnet add package SAEA.MQTT |
| 文件传输 |
SAEA.FileSocket |
dotnet add package SAEA.FileSocket |
组件导航 🧩
核心组件
| 组件 |
功能 |
NuGet |
中文文档 |
英文文档 |
适用场景 |
| 🔌 SAEA.Sockets |
跨平台高性能 Socket 通信框架 |
NuGet |
中文 |
English |
游戏服务器、实时通信、IoT |
| 🔧 SAEA.Common |
通用工具类库 |
NuGet |
中文 |
English |
序列化、缓存、加密 |
Web 应用组件
实时通信组件
P2P 通信组件
| 组件 |
功能 |
NuGet |
中文文档 |
英文文档 |
适用场景 |
| 🔗 SAEA.P2P |
P2P 直连通信组件 |
NuGet |
中文 |
English |
NAT 穿透、局域网发现、即时通讯、游戏对战 |
数据与存储组件
分布式系统组件
网络工具组件
| 组件 |
功能 |
NuGet |
中文文档 |
英文文档 |
适用场景 |
| 🌍 SAEA.DNS |
DNS 服务器/客户端 |
NuGet |
中文 |
English |
DNS 代理、域名解析 |
项目架构 📐
SAEA 组件家族架构图
┌─────────────────────────────────────────────────────────────────┐
│ SAEA 组件家族架构总览 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────── 应用层组件 ─────────────┐ │
│ │ │ │
│ │ ┌─────────┐ ┌──────────┐ │ │
│ │ │ MVC │ │ WebSocket│ │ │
│ │ │(Web框架)│ │(实时通信)│ │ │
│ │ └────┬────┘ └────┬─────┘ │ │
│ │ │ │ │ │
│ │ ┌────▼────┐ ┌───▼────┐ ┌─────────┐│ │
│ │ │ RPC │ │ MQTT │ │ Message ││ │
│ │ │(远程调用)│ │(IoT) │ │ Socket ││ │
│ │ └────┬────┘ └───┬────┘ └────┬────┘│ │
│ │ │ │ │ │ │
│ │ ┌────▼────┐ ┌───▼────┐ │ │ │
│ │ │ P2P │ │ Redis │ │ │ │
│ │ │(NAT穿透)│ │(缓存) │ │ │ │
│ │ └────┬────┘ └───┬────┘ │ │ │
│ │ │ │ │ │ │
│ └─────────┼───────────┼────────────┼─────┘ │
│ │ │ │ │
│ ┌─────────▼───────────▼────────────▼─────┐ │
│ │ SAEA.Sockets (核心层) │ │
│ │ 跨平台高性能Socket 框架 │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────┐ │ │
│ │ │IocpSocket│ │StreamSock│ │UdpSock│ │ │
│ │ │ (TCP) │ │(流模式) │ │ (UDP) │ │ │
│ │ └──────────┘ └──────────┘ └──────┘ │ │
│ │ ┌──────────────────────────────────┐ │ │
│ │ │ BufferPool │ Session │ Coder │ │ │
│ │ │ (内存池) │(会话) │(编解码) │ │ │
│ │ └──────────────────────────────────┘ │ │
│ └──────────────────┬────────────────────┘ │
│ │ │
│ ┌──────────────────▼────────────────────┐ │
│ │ SAEA.Common (基础层) │ │
│ │ 通用工具类库 (序列化/缓存/加密) │ │
│ │ ┌────────┐ ┌───────┐ ┌───────┐ │ │
│ │ │Serialize│ │ Cache │ │Encrypt│ │ │
│ │ │(序列化) │ │(缓存) │ │(加密) │ │ │
│ │ └────────┘ └───────┘ └───────┘ │ │
│ └───────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
数据流架构图
客户端请求流程:
┌─────────┐ ┌──────────┐ ┌──────────┐
│ 客户端 │─────►│ Sockets │─────►│ Coder │
│ (TCP/UDP)│ │异步IO接收│ │ 解码 │
└─────────┘ └──────────┘ └──────────┘
│
▼
┌────────────────────────────────┐
│ 应用层处理(业务逻辑) │
│ MVC / RPC / WebSocket / MQTT │
└────────────────────────────────┘
│
▼
┌──────────┐ ┌──────────┐
│ Coder │─────►│ Sockets │─────► 客户端
│ 编码 │ │异步IO发送│
└──────────┘ └──────────┘
核心特性 ✨
| 特性 |
说明 |
| 🚀 跨平台异步 IO |
Windows/Linux/macOS 由 .NET 运行时自动选择 IOCP / epoll / kqueue,同一套 API |
| 📦 零拷贝 + 内存池 |
收发路径统一 Span/Memory 零拷贝,BufferManager、UserTokenPool、MemoryPoolManager 池化复用,大幅减少 GC 压力 |
| 🔒 SSL/TLS 加密 |
Stream 模式支持安全连接 |
| 🌐 IPv6 支持 |
完全兼容 IPv6 协议 |
| 🔄 会话管理 |
SessionManager 自动管理连接会话 |
| 🛠️ 自定义协议 |
ICoder 接口支持灵活的协议编解码 |
| 🔗 链式配置 |
SocketOptionBuilder 简洁易用 |
| 📝 完整组件 |
MVC、WebSocket、RPC、Redis、MQTT 等全场景覆盖 |
实现与性能 📊
两种收发实现
| 实现 |
选择方式 |
适用场景 |
SocketAsyncEventArgs 模式 |
.UseIocp() |
高吞吐二进制协议、自定义帧、UDP(UDP 仅支持此模式) |
| Pipelines 流模式 |
.UseStream() |
需要 SSL/TLS,或希望用 GetStream() 流式读写 |
两种实现都跨平台,底层 IO 机制由 .NET 运行时选择(Windows IOCP / Linux epoll / macOS kqueue)。UseIocp() 是历史命名,不代表 Windows 限定。
SAEA.RPC vs HTTP RPC
| 特性 |
SAEA.RPC |
HTTP RPC |
| 序列化 |
Protobuf |
JSON |
| 传输协议 |
TCP |
HTTP |
| 连接模式 |
长连接 |
短连接 |
| 并发模型 |
异步 IO |
阻塞 |
| 性能 |
高 |
中 |
零拷贝收发路径(实测)
SAEA.Sockets 的 span 收包路径在同一收发基准下,相较旧解码路径显著降低分配与 GC:
| 路径 |
吞吐 |
分配 |
GC0 |
旧路径 LegacyDecode |
42,345 帧/秒 |
4,662 B/帧 |
18 |
零拷贝 SpanDecodeStream |
45,344 帧/秒 |
34 B/帧 |
0 |
数据来自 SAEA.P2PTest --bench-iocp(4KB 帧,单机回环,数值随硬件波动)。
本 README 不提供跨框架性能对比数字(与 TouchSocket、DotNetty 等的差异请以自己场景的压测为准)。
常见问题 ❓
Q1: SAEA 适合什么项目?
A: SAEA 适合以下场景:
- 🎮 游戏服务器(实时对战、状态同步)
- 📊 实时数据推送(股票行情、体育比分)
- 🤖 IoT 设备通信(传感器数据上报)
- 💬 即时通讯(私聊、群聊、客服系统)
- 🔗 微服务通信(RPC 远程调用)
- 📁 大文件传输(断点续传、高速传输)
- 🌐 P2P 直连通信(NAT 穿透、局域网发现)
Q2: 如何选择合适的组件?
A: 根据你的需求选择:
你的需求 推荐组件
─────────────────────────────────────
Web API 开发 → SAEA.MVC
实时聊天/推送 → SAEA.WebSocket
P2P 直连通信 → SAEA.P2P
IoT 设备通信 → SAEA.MQTT
Redis 缓存操作 → SAEA.RedisSocket
微服务 RPC → SAEA.RPC
文件传输 → SAEA.FileSocket
自定义协议 → SAEA.Sockets
Q3: 是否支持跨平台?
A: 基于 .NET Standard 2.0,Windows、Linux、macOS 使用同一套 API:
- ✅ Windows(底层 IOCP)
- ✅ Linux(底层 epoll)
- ✅ macOS(底层 kqueue)
底层机制由 .NET 运行时自动选择,代码无需条件编译或切换实现。UseIocp() 是 SocketAsyncEventArgs 收发实现的历史命名,不表示 Windows 限定。
Q4: NuGet 如何安装?
A: 搜索 “SAEA” 或直接安装:
# Package Manager
Install-Package SAEA.Sockets -Version 26.9.21.1
# .NET CLI
dotnet add package SAEA.Sockets --version 26.9.21.1
NuGet 地址
Q5: 如何快速上手?
A: 3 步快速开始:
- 安装对应组件的 NuGet 包
- 阅读组件 README 的 “30秒快速开始”
- 查看完整示例代码
每个组件都有详细的使用示例和注释。
Q6: 是否有示例项目?
A: Src 中包含多个测试项目,展示实际使用场景:
SAEA.SocketsTest - Socket 使用示例
SAEA.WebSocketTest - WebSocket 示例
SAEA.MVCTest - MVC Web 应用示例
SAEA.RedisTest - Redis 操作示例
SAEA.RPCTest - RPC 调用示例
SAEA.P2PTest - P2P NAT 穿透示例
实例截图 🖼️
资源链接 🔗
官方资源
相关项目
技术支持
许可证
Apache License 2.0
评论