SAEA.Common
7.26.4.21
dotnet add package SAEA.Common --version 7.26.4.21
NuGet\Install-Package SAEA.Common -Version 7.26.4.21
<PackageReference Include="SAEA.Common" Version="7.26.4.21" />
<PackageVersion Include="SAEA.Common" Version="7.26.4.21" />
<PackageReference Include="SAEA.Common" />
paket add SAEA.Common --version 7.26.4.21
#r "nuget: SAEA.Common, 7.26.4.21"
#:package SAEA.Common@7.26.4.21
#addin nuget:?package=SAEA.Common&version=7.26.4.21
#tool nuget:?package=SAEA.Common&version=7.26.4.21
SAEA.Common - 高性能通用工具类库 🛠️
English Version | 中文版
基于 .NET Standard 2.0 的高性能通用工具类库,提供序列化、缓存、加密、网络请求等基础能力,是 SAEA 项目家族的核心依赖。
快速导航 🧭
| 章节 | 内容 |
|---|---|
| ⚡ 30秒快速开始 | 最简单的上手示例 |
| 🎯 核心特性 | 类库的主要功能 |
| 📐 架构设计 | 模块结构与组件关系 |
| 💡 应用场景 | 何时使用各工具类 |
| 📊 性能对比 | 序列化性能对比数据 |
| ❓ 常见问题 | FAQ 快速解答 |
| 🔧 核心类 | 主要类一览 |
| 📝 使用示例 | 详细代码示例 |
30秒快速开始 ⚡
最快上手方式,只需3步即可使用序列化和缓存功能:
Step 1: 安装 NuGet 包
dotnet add package SAEA.Common
Step 2: JSON 序列化(仅需2行代码)
using SAEA.Common.Serialization;
// 序列化对象
var json = SerializeHelper.Serialize(new { Name = "SAEA", Version = "7.26" });
// 反序列化对象
var obj = SerializeHelper.Deserialize<MyClass>(json);
// 或者使用扩展方法
var json2 = myObject.ToJsonString();
var obj2 = json.JsonToObj<MyClass>();
Step 3: 高性能缓存
using SAEA.Common.Caching;
// 创建10分钟自动过期的缓存
var cache = new MemoryCache<string>(TimeSpan.FromMinutes(10));
cache.Set("key", "value");
var val = cache.Get("key");
var val2 = cache.GetOrAdd("key2", () => ComputeExpensiveValue());
就这么简单! 🎉 你已经掌握了 SAEA.Common 的核心用法。
核心特性 🎯
| 特性 | 说明 | 优势 |
|---|---|---|
| 📦 多格式序列化 | JSON / Protobuf / Binary 三种方式 | 灵活选择,满足不同场景需求 |
| ⚡ 高性能缓存 | MemoryCache / BlockingQueue / FastQueue | 减少重复计算,提升响应速度 |
| 🔒 加密与压缩 | AES / MD5 / GZip / Deflate | 数据安全与传输优化 |
| 🌐 网络请求 | HttpClient 连接池 / WebClient 扩展 | 连接复用,支持重试机制 |
| 📁 文件操作 | 同步/异步读写,流式处理 | 高效IO,支持大文件处理 |
| ⏰ 时间处理 | 时区转换 / Unix时间戳 / 格式化 | 跨时区应用无忧 |
| 🔄 对象复制 | 表达式树高性能深拷贝 | 比反射快10倍以上 |
| 📝 异步日志 | 批量写入 / 文件滚动 / 控制台彩色 | 生产环境日志解决方案 |
架构设计 📐
模块架构图
┌─────────────────────────────────────────────────────────────┐
│ SAEA.Common 架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Serialize │ │ Caching │ │ Encryption │ │
│ │ 序列化模块 │ │ 缓存模块 │ │ 加密模块 │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐ │
│ │ JSON/PB/ │ │MemoryCache │ │ AES/MD5/ │ │
│ │ Binary │ │Queue/Batcher│ │ GZip │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Network │ │ IO │ │ Utils │ │
│ │ 网络模块 │ │ 文件模块 │ │ 工具模块 │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐ │
│ │HttpClient │ │FileHelper │ │LogHelper │ │
│ │ApiHelper │ │Async RW │ │ConfigHelper │ │
│ └─────────────┘ └─────────────┘ │FastCopy │ │
│ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
数据流转图
序列化流程:
对象 ──► SerializeHelper ──► 格式选择
│
┌───────────────┼───────────────┐
│ │ │
▼ ▼ ▼
JSON序列化 Protobuf序列化 Binary序列化
(可读性强) (高性能小体积) (兼容性好)
│ │ │
└───────────────┴───────────────┘
│
▼
byte[] / string
缓存流程:
请求数据 ──► 检查缓存
│
┌───────┴───────┐
│ │
命中 未命中
│ │
▼ ▼
返回缓存值 计算新值 ──► 存入缓存 ──► 返回
│
▼
过期自动清理
应用场景 💡
✅ 各模块适用场景
| 模块 | 场景 | 推荐理由 |
|---|---|---|
| 📦 序列化 | API 响应、数据存储、RPC 通信 | 多格式支持,一套代码多种输出 |
| ⚡ 缓存 | 热点数据、配置缓存、限流计数 | 内存缓存零 IO 延迟 |
| 📋 队列 | 任务调度、消息处理、生产消费模型 | 线程安全,支持阻塞/异步 |
| 🔒 加密 | 密码存储、敏感数据保护、数据签名 | AES 对称加密,安全可靠 |
| 📦 压缩 | 网络传输、日志归档、大文件存储 | GZip/Deflate 双模式 |
| 🌐 网络 | HTTP API 调用、Web 抓取、第三方集成 | 连接池复用,自动重试 |
| 📁 文件 | 日志写入、配置存储、临时文件 | 同步异步双模式 |
| 🔄 复制 | DTO 转换、实体映射、深拷贝 | 表达式树,性能极致 |
❌ 不适合的场景
| 场景 | 推荐替代方案 |
|---|---|
| 分布式缓存 | 使用 Redis (SAEA.RedisSocket) |
| 高吞吐消息队列 | 使用 RabbitMQ / Kafka |
| 大规模日志收集 | 使用 ELK / Seq |
| 数据库访问 | 使用 EF Core / Dapper |
性能对比 📊
序列化性能对比
| 格式 | 序列化速度 | 反序列化速度 | 数据大小 | 适用场景 |
|---|---|---|---|---|
| JSON | ⭐⭐⭐ | ⭐⭐⭐ | 较大 | API 通信、配置文件 |
| Protobuf | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 最小 | RPC 通信、存储 |
| Binary | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 中等 | 内部通信、兼容性好 |
对象复制性能对比
| 方式 | 性能 | 说明 |
|---|---|---|
| FastCopy (表达式树) | ⭐⭐⭐⭐⭐ | 编译后直接调用,性能最优 |
| ModelCloneHelper | ⭐⭐⭐⭐ | 反射缓存优化,灵活性好 |
| 传统反射 | ⭐⭐ | 每次反射,性能最差 |
缓存组件对比
| 组件 | 特点 | 吞吐量 | 适用场景 |
|---|---|---|---|
| MemoryCache | 自动过期、线程安全 | 高 | 短期缓存、配置缓存 |
| BlockingQueue | 阻塞式、线程安全 | 中 | 生产消费模型 |
| FastQueue | 异步、基于 Channels | 极高 | 高吞吐异步处理 |
💡 提示: FastQueue 基于
System.Threading.Channels实现,是 .NET Core 推荐的高性能异步队列方案。
常见问题 ❓
Q1: JSON 和 Protobuf 如何选择?
A:
- JSON: 可读性强,适合 API 响应、配置文件、调试场景
- Protobuf: 性能高、体积小,适合 RPC 通信、存储、内部数据交换
// JSON - 可读性好
var json = SerializeHelper.Serialize(obj);
// Protobuf - 性能最优
var bytes = SerializeHelper.PBSerialize(obj);
Q2: MemoryCache 如何设置过期时间?
A: 创建时指定过期时间,过期后自动清理:
// 10分钟后过期
var cache = new MemoryCache<string>(TimeSpan.FromMinutes(10));
// 永不过期(使用最大值)
var permanent = new MemoryCache<string>(TimeSpan.MaxValue);
Q3: 如何实现高性能对象复制?
A: 使用 FastCopy 表达式树复制,比反射快 10 倍以上:
// 深拷贝(反射方式,简单但较慢)
var copy1 = myObject.DeepCopy();
// 表达式树复制(最快,编译后直接调用)
var copy2 = FastCopy<MyClass, MyClass>.Copy(myObject);
// 不同类型间映射
var dto = ModelCloneHelper.Copy<UserDto>(userEntity);
Q4: AESHelper 加密的密码有什么要求?
A: 密码可以是任意字符串,内部会自动转换为密钥:
// 加密
var encrypted = AESHelper.Encrypt("敏感数据", "your-password");
// 解密
var original = AESHelper.Decrypt(encrypted, "your-password");
Q5: FastQueue 和 BlockingQueue 如何选择?
A:
- FastQueue: 异步模式(
await),高吞吐,推荐用于 .NET Core - BlockingQueue: 同步阻塞模式,适合传统同步代码
// FastQueue - 异步(推荐)
var data = await fastQueue.ReadAsync();
await fastQueue.WriteAsync("data");
// BlockingQueue - 同步阻塞
var item = queue.Dequeue(TimeSpan.FromSeconds(5));
Q6: 如何实现异步批量日志写入?
A: 使用 LogHelper 内置异步批量写入:
// 自动异步写入文件
LogHelper.Info("普通信息");
LogHelper.Warn("警告信息");
LogHelper.Error("错误信息", exception);
// 控制台彩色输出
ConsoleHelper.WriteLine("成功", ConsoleColor.Green);
ConsoleHelper.WriteLineError("失败", ConsoleColor.Red);
Q7: ConfigHelper 配置文件保存在哪里?
A: 默认保存在程序运行目录,以 {类名}.json 命名:
// 创建配置对象
var config = new ConfigHelper<AppConfig>();
config.Instance.ServerIP = "127.0.0.1";
config.Save(); // 保存到 AppConfig.json
// 下次启动自动加载
var loaded = config.Read();
核心类 🔧
序列化类
| 类名 | 说明 |
|---|---|
SerializeHelper |
核心序列化工具,支持 JSON/Protobuf/Binary |
JsonConvert |
JSON 转换器 |
JsonSerializer |
JSON 序列化器 |
缓存与队列
| 类名 | 说明 |
|---|---|
MemoryCache<T> |
自定义过期缓存,自动清理机制 |
BlockingQueue<T> |
阻塞式线程安全队列 |
FastQueue<T> |
基于 Channels 的高性能异步队列 |
HashMap<T1,T2,T3> |
类似 Redis HashSet 的多层键值存储 |
Batcher<T> |
批量数据打包处理 |
加密与压缩
| 类名 | 说明 |
|---|---|
AESHelper |
AES 对称加密/解密 |
MD5Helper |
MD5 哈希计算(字符串、文件、流) |
GZipHelper |
GZip/Deflate 压缩解压 |
网络与 IO
| 类名 | 说明 |
|---|---|
HttpClientHelper |
HttpClient 连接池封装 |
ApiHelper |
WebClient 扩展,支持重试、日志跟踪 |
FileHelper |
文件读写操作(同步/异步) |
IPHelper |
IP 地址工具,端口检测 |
DNSHelper |
DNS 解析工具 |
工具类
| 类名 | 说明 |
|---|---|
DateTimeHelper |
时间处理,时区转换,Unix 时间戳 |
ByteHelper |
字节操作,位操作扩展 |
HexConverter |
自定义进制转换 |
LogHelper |
异步日志记录 |
ConsoleHelper |
控制台彩色输出 |
ConfigHelper<T> |
对象持久化配置 |
ModelCloneHelper |
实体属性复制转换 |
FastCopy<TIn,TOut> |
表达式树高性能复制 |
使用示例 📝
JSON 序列化
using SAEA.Common.Serialization;
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}
var user = new User { Name = "张三", Age = 25 };
// 方式1: 静态方法
var json = SerializeHelper.Serialize(user);
var obj = SerializeHelper.Deserialize<User>(json);
// 方式2: 扩展方法
var json2 = user.ToJsonString();
var obj2 = json2.JsonToObj<User>();
Protobuf 序列化(高性能二进制)
using SAEA.Common.Serialization;
[ProtoContract] // 需要添加 ProtoContract 特性
public class ProtoUser
{
[ProtoMember(1)]
public string Name { get; set; }
[ProtoMember(2)]
public int Age { get; set; }
}
var user = new ProtoUser { Name = "张三", Age = 25 };
// 序列化为二进制
var bytes = SerializeHelper.PBSerialize(user);
// 反序列化
var obj = SerializeHelper.PBDeserialize<ProtoUser>(bytes);
Binary 二进制序列化
using SAEA.Common.Serialization;
// 序列化
var bytes = myObject.ToBytes();
// 反序列化
var obj = bytes.ToInstance<MyClass>();
MemoryCache 缓存
using SAEA.Common.Caching;
// 创建10分钟过期缓存
var cache = new MemoryCache<string>(TimeSpan.FromMinutes(10));
// 设置值
cache.Set("key1", "value1");
// 获取值
var value = cache.Get("key1");
// 获取或添加(懒加载)
var value2 = cache.GetOrAdd("key2", () =>
{
// 只有在 key2 不存在时才执行
return ExpensiveComputation();
});
// 删除
cache.Remove("key1");
// 清空
cache.Clear();
BlockingQueue 阻塞队列
using SAEA.Common.Caching;
var queue = new BlockingQueue<int>();
// 生产者线程
Task.Run(() =>
{
for (int i = 0; i < 100; i++)
{
queue.Enqueue(i);
Thread.Sleep(100);
}
});
// 消费者线程
Task.Run(() =>
{
while (true)
{
// 阻塞等待,最多等5秒
var item = queue.Dequeue(TimeSpan.FromSeconds(5));
if (item != default)
{
Console.WriteLine($"处理: {item}");
}
}
});
FastQueue 异步队列
using SAEA.Common.Caching;
var queue = new FastQueue<string>();
// 生产者
_ = Task.Run(async () =>
{
for (int i = 0; i < 100; i++)
{
await queue.WriteAsync($"数据{i}");
await Task.Delay(100);
}
});
// 消费者
_ = Task.Run(async () =>
{
while (true)
{
var data = await queue.ReadAsync();
Console.WriteLine($"处理: {data}");
}
});
Batcher 批量处理
using SAEA.Common.Caching;
var batcher = new Batcher<int>(batchSize: 100);
// 注册批量处理事件
batcher.OnBatch += (items) =>
{
Console.WriteLine($"批量处理 {items.Count} 条数据");
// 批量写入数据库...
};
// 添加数据
for (int i = 0; i < 500; i++)
{
batcher.Add(i);
}
// 手动触发处理
batcher.Flush();
AES 加密解密
using SAEA.Common.Encryption;
string plainText = "敏感数据";
string password = "my-secret-password";
// 加密
string encrypted = AESHelper.Encrypt(plainText, password);
// 解密
string decrypted = AESHelper.Decrypt(encrypted, password);
Console.WriteLine($"原文: {plainText}");
Console.WriteLine($"加密: {encrypted}");
Console.WriteLine($"解密: {decrypted}");
MD5 哈希
using SAEA.Common.Encryption;
// 字符串 MD5
var hash1 = MD5Helper.GetStringMd5("hello world");
// 文件 MD5
var hash2 = MD5Helper.GetFileMd5(@"C:\file.txt");
// 流 MD5
using var stream = File.OpenRead(@"C:\file.txt");
var hash3 = MD5Helper.GetStreamMd5(stream);
GZip 压缩解压
using SAEA.Common.Encryption;
string text = "这是一段需要压缩的长文本...";
// 压缩
byte[] compressed = GZipHelper.Compress(text);
// 解压
string original = GZipHelper.Decompress(compressed);
// Deflate 压缩(另一种算法)
byte[] deflated = GZipHelper.DeflateCompress(text);
string original2 = GZipHelper.DeflateDecompress(deflated);
HttpClient 网络请求
using SAEA.Common;
// GET 请求
var html = await HttpClientHelper.GetAsync("https://api.example.com/data");
// POST JSON
var data = new { Name = "张三", Age = 25 };
var result = await HttpClientHelper.PostJsonAsync("https://api.example.com/post", data);
// 带请求头
var headers = new Dictionary<string, string>
{
{ "Authorization", "Bearer token123" },
{ "Content-Type", "application/json" }
};
var response = await HttpClientHelper.PostJsonAsync("https://api.example.com/post", data, headers);
ApiHelper(支持重试)
using SAEA.Common;
var apiHelper = new ApiHelper();
// GET 请求
apiHelper.Get("https://api.example.com/data", (response) =>
{
Console.WriteLine($"响应: {response}");
});
// POST 请求
apiHelper.Post("https://api.example.com/post", jsonData, (response) =>
{
Console.WriteLine($"响应: {response}");
});
文件操作
using SAEA.Common.IO;
// 同步写入
FileHelper.Write("file.txt", "Hello World");
// 同步读取
var content = FileHelper.Read("file.txt");
// 异步写入
await FileHelper.WriteAsync("file.txt", "Hello World");
// 异步读取
var content2 = await FileHelper.ReadAsync("file.txt");
// 追加内容
FileHelper.Append("file.txt", "\n追加的内容");
// 异步追加
await FileHelper.AppendAsync("file.txt", "\n更多内容");
日志记录
using SAEA.Common;
// 异步日志(自动写入文件)
LogHelper.Info("普通信息日志");
LogHelper.Warn("警告信息日志");
LogHelper.Debug("调试信息日志");
LogHelper.Error("错误信息日志");
LogHelper.Error("异常日志", exception);
// 控制台彩色输出
ConsoleHelper.WriteLine("成功信息", ConsoleColor.Green);
ConsoleHelper.WriteLine("警告信息", ConsoleColor.Yellow);
ConsoleHelper.WriteLineError("错误信息", ConsoleColor.Red);
配置持久化
using SAEA.Common;
public class AppConfig
{
public string ServerIP { get; set; } = "127.0.0.1";
public int Port { get; set; } = 8080;
public bool EnableSSL { get; set; } = false;
}
// 创建配置对象(自动加载或创建)
var config = new ConfigHelper<AppConfig>();
// 修改配置
config.Instance.ServerIP = "192.168.1.100";
config.Instance.Port = 9000;
config.Instance.EnableSSL = true;
// 保存到文件(AppConfig.json)
config.Save();
// 重新加载
config.Read();
对象复制
using SAEA.Common;
// 深拷贝(反射方式)
var copy1 = originalObject.DeepCopy();
// 表达式树高性能复制(推荐)
var copy2 = FastCopy<User, User>.Copy(originalObject);
// 不同类型间属性映射
public class UserEntity { public string Name { get; set; } }
public class UserDto { public string Name { get; set; } }
var entity = new UserEntity { Name = "张三" };
var dto = ModelCloneHelper.Copy<UserDto>(entity);
时间处理
using SAEA.Common;
// 获取当前时间戳(秒)
var timestamp = DateTimeHelper.GetTimestamp();
// 时间戳转日期
var date = DateTimeHelper.FromTimestamp(timestamp);
// UTC 时间转换
var utc = DateTimeHelper.ToUTC(DateTime.Now);
var local = DateTimeHelper.ToLocal(DateTime.UtcNow);
// 格式化输出
var formatted = DateTimeHelper.ToString(DateTime.Now, "yyyy-MM-dd HH:mm:ss");
依赖包
| 包名 | 版本 | 说明 |
|---|---|---|
| protobuf-net | 3.2.56 | Protobuf 序列化 |
| Nito.AsyncEx | 5.1.2 | 异步编程增强 |
| System.IO.Pipelines | 10.0.2 | 高性能 IO 管道 |
| System.Threading.Channels | 10.0.2 | 线程安全通道 |
| System.Memory | 4.6.3 | 内存优化 |
更多资源
许可证
Apache License 2.0
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.CSharp (>= 4.7.0)
- Nito.AsyncEx (>= 5.1.2)
- protobuf-net (>= 3.2.56)
- System.Collections.Concurrent (>= 4.3.0)
- System.IO.Pipelines (>= 10.0.6)
- System.Memory (>= 4.6.3)
- System.Security.Permissions (>= 10.0.6)
- System.Threading.Channels (>= 10.0.6)
NuGet packages (14)
Showing the top 5 NuGet packages that depend on SAEA.Common:
| Package | Downloads |
|---|---|
|
SAEA.Sockets
SAEA.Socket is a high-performance IOCP framework based on.dotnet standard 2.0; Src contains its application test scenarios, such as websocket,rpc, redis driver, MVC WebAPI, lightweight message server, ultra large file transmission, etc. SAEA.Socket是一个高性能IOCP框架,基于.dotnet standard 2.0;Src中含有其应用测试场景,例如websocket、rpc、redis驱动、MVC WebAPI、轻量级消息服务器、超大文件传输等 https://github.com/yswenli/SAEA |
|
|
SAEA.Http
This is a web component based on SAEA.Sockets. It is lightweight, high performance, easy to use and self hosting. 这是一个基于SAEA.Sockets的web组件,轻量高性能,使用简便,自宿主。https://github.com/yswenli/SAEA/tree/master/Src/SAEA.HttpTest。 |
|
|
SAEA.MVC
This is a web component based on SAEA.Sockets. It is lightweight, high performance, easy to use and self hosting. 这是一个基于SAEA.Sockets的web组件,轻量高性能,使用简便,自宿主。https://github.com/yswenli/SAEA/tree/master/Src/SAEA.MVCTest。 |
|
|
SAEA.RedisSocket
This is a high-performance redis driver based on SAEA.Sockets, supporting redis cluster. 这是一个基于SAEA.Sockets的redis 高性能驱动,支持redis cluster https://github.com/yswenli/SAEA |
|
|
SAEA.WebSocket
This is a websocket server and client component based on SAEA.Socket. 这是基于SAEA.Socket的websocket服务器、客户端组件 https://github.com/yswenli/SAEA |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on SAEA.Common:
| Repository | Stars |
|---|---|
|
yswenli/GFF
GFF is a imitation QQ communication project, based on high IOCP. GFF是模仿QQ通讯项目,通信基于SAEA.MessageSocket、SAEA.Http、SAEA.MVC实现
|
| Version | Downloads | Last Updated |
|---|---|---|
| 7.26.4.21 | 29 | 4/20/2026 |
| 7.26.4.20 | 25 | 4/20/2026 |
| 7.26.2.2 | 584 | 2/2/2026 |
| 7.26.1.27 | 591 | 1/27/2026 |
| 7.26.1.25 | 625 | 1/25/2026 |
| 7.25.2.19 | 1,295 | 2/19/2025 |
| 7.25.2.18 | 741 | 2/18/2025 |
| 7.25.2.13 | 730 | 2/13/2025 |
| 7.25.2.11 | 777 | 2/11/2025 |
| 7.24.8.4 | 812 | 8/4/2024 |
| 7.23.9.24 | 1,471 | 9/24/2023 |
| 7.0.3.19 | 2,397 | 3/19/2023 |
| 7.0.0.3 | 8,098 | 2/27/2022 |
| 7.0.0.2 | 2,848 | 12/5/2021 |
| 7.0.0.1 | 2,676 | 11/28/2021 |
| 6.2.6.7 | 4,265 | 9/19/2021 |
| 6.2.6.6 | 3,088 | 8/15/2021 |
| 6.2.6.5 | 2,943 | 8/10/2021 |
| 6.2.6.4 | 2,999 | 7/11/2021 |
| 6.2.6.3 | 3,028 | 4/22/2021 |
SAEA. Common is a tool class project in the SAEA project
SAEA.Common 是SAEA项目中的工具类项目