README

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

NuGet version (SAEA) License

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秒快速开始 最简单的上手方式
🧩 组件导航 选择合适的组件
📐 项目架构 整体架构设计
✨ 核心特性 主要功能亮点
📊 实现与性能 两种收发实现与实测数据说明
❓ 常见问题 FAQ 快速解答
🔗 资源链接 更多学习资源

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 应用组件

组件 功能 NuGet 中文文档 英文文档 适用场景
🌐 SAEA.Http HTTP 服务器 NuGet 中文 English RESTful API、静态文件服务
🎨 SAEA.MVC MVC Web 框架 NuGet 中文 English Web 应用、API 服务

实时通信组件

组件 功能 NuGet 中文文档 英文文档 适用场景
💬 SAEA.WebSocket WebSocket 服务器/客户端 NuGet 中文 English 实时聊天、推送通知
🤖 SAEA.MQTT MQTT 协议实现 NuGet 中文 English IoT 设备、智能家居
📨 SAEA.MessageSocket 消息服务器 NuGet 中文 English 即时通讯、在线客服

P2P 通信组件

组件 功能 NuGet 中文文档 英文文档 适用场景
🔗 SAEA.P2P P2P 直连通信组件 NuGet 中文 English NAT 穿透、局域网发现、即时通讯、游戏对战

数据与存储组件

组件 功能 NuGet 中文文档 英文文档 适用场景
📦 SAEA.RedisSocket Redis 客户端 NuGet 中文 English Redis 缓存、分布式锁
📁 SAEA.FileSocket 文件传输组件 NuGet 中文 English 大文件传输、断点续传
🗂️ SAEA.FTP FTP 服务器/客户端 NuGet 中文 English 文件服务器、FTP 客户端

分布式系统组件

组件 功能 NuGet 中文文档 英文文档 适用场景
🔗 SAEA.RPC RPC 远程调用 NuGet 中文 English 微服务通信、远程调用
📊 SAEA.QueueSocket 内存消息队列 NuGet 中文 English Pub/Sub、事件通知

网络工具组件

组件 功能 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 步快速开始:

  1. 安装对应组件的 NuGet 包
  2. 阅读组件 README 的 “30秒快速开始”
  3. 查看完整示例代码

每个组件都有详细的使用示例和注释。

Q6: 是否有示例项目?

A: Src 中包含多个测试项目,展示实际使用场景:

  • SAEA.SocketsTest - Socket 使用示例
  • SAEA.WebSocketTest - WebSocket 示例
  • SAEA.MVCTest - MVC Web 应用示例
  • SAEA.RedisTest - Redis 操作示例
  • SAEA.RPCTest - RPC 调用示例
  • SAEA.P2PTest - P2P NAT 穿透示例

实例截图 🖼️


资源链接 🔗

官方资源

相关项目

  • WebRedisManager - 基于 SAEA.RedisSocket 的 Redis 管理工具
  • SAEA.Rested - 基于 SAEA.MVC 的 REST API 示例
  • GFF - 基于 SAEA 的仿 QQ 通信程序

技术支持


许可证

Apache License 2.0

评论

暂无评论