Skip to content

Repository files navigation

AutoCSer - English

AutoCSer 是一个 C# 实现的分布式应用基础设施框架,其核心是基于 TCP 长连接实现的全双工 RPC 组件,具有高并发高吞吐高性能特性,客户端提供 .NET NativeAOT 支持
AutoCSer RPC 在轻量级 API 的高并发实战环境中,单节点可提供 100W+/s 以上的 QPS 吞吐性能,测试吞吐性能超过 .NET gRPC一个数量级
基于 AutoCSer RPC 实现的支持面向对象编程内存数据库,支持传统数据库级别的可靠持久化,持久化 API 具有天然的事务特性本地嵌入模式支持 .NET NativeAOT 可满足高性能游戏局内服务需求。
支持面向对象编程的特性使它在内存充足的场景中几乎无所不能,当然前提是开发者至少需要可以灵活运用各种常用数据结构与算法(其实绝大多数问题都可以求助 AI 解决)。比如你可以编写各种常用数据结构就可以封装出逻辑功能远超 Redis API 的组件,你还可以提供向量 API、图 API、时序聚合 API 甚至关系型数据库 API(非 SQL),你的开发能力决定它的功能上限,只需要你能够在内存中实现这些数据结构与算法
AutoCSer 内存数据库在轻量级 API 的高并发实战环境中,单节点可提供 100W+/s 以上的 TPS 吞吐性能,测试吞吐性能远高于 Garnet + StackExchange.Redis 组合。
NuGet 发布了核心程序集 AutoCSer.dll 的 3 个版本包括 .NET8 | .NET Standard 2.1 | .NET Standard 2.0,.NET Framework 4.5 版本以及其它项目需要到 github 或者 atomgit 下载源代码自行编译。

开箱即用的 RPC

定义服务接口

/// <summary>/// 接口对称 API 接口定义/// </summary>publicinterfaceISymmetryService{/// <summary>/// 异步 API 定义/// </summary>/// <param name="left"></param>/// <param name="right"></param>/// <returns></returns>System.Threading.Tasks.Task<int>AddAsync(intleft,intright);/// <summary>/// 同步 API 定义(不建议在接口对称服务中定义同步 API,因为客户端同步阻塞模式可能造成性能瓶颈)/// </summary>/// <param name="left"></param>/// <param name="right"></param>/// <returns></returns>intAdd(intleft,intright);}

实现服务接口

/// <summary>/// 接口对称 API 实现/// </summary>internalsealedclassSymmetryService:ISymmetryService{/// <summary>/// 异步 API 实现/// </summary>/// <param name="left"></param>/// <param name="right"></param>/// <returns></returns>System.Threading.Tasks.Task<int>ISymmetryService.AddAsync(intleft,intright){returnTask.FromResult(left+right);}/// <summary>/// 同步 API 实现/// </summary>/// <param name="left"></param>/// <param name="right"></param>/// <returns></returns>publicintAdd(intleft,intright){returnleft+right;}}

创建服务端监听

AutoCSer.Net.CommandServerConfigconfig=newAutoCSer.Net.CommandServerConfig{Host=newAutoCSer.Net.HostEndPoint((ushort)AutoCSer.TestCase.Common.CommandServerPortEnum.Document)};awaitusing(AutoCSer.Net.CommandListenercommandListener=newAutoCSer.Net.CommandListener(config,AutoCSer.Net.CommandServerInterfaceControllerCreator.GetCreator<ISymmetryService>(newSymmetryService()))){if(awaitcommandListener.Start()){Console.ReadLine();}}

创建 RPC 客户端

/// <summary>/// 测试客户端单例(全双工长连接只需要创建一个客户端)/// </summary>privatestaticreadonlyAutoCSer.Net.CommandClient<ISymmetryService>commandClient=newAutoCSer.Net.CommandClientConfig<ISymmetryService>{Host=newAutoCSer.Net.HostEndPoint((ushort)AutoCSer.TestCase.Common.CommandServerPortEnum.Document),}.CreateSymmetryClient();/// <summary>/// Client test/// </summary>/// <returns></returns>internalstaticasyncTaskTest(){varclient=awaitcommandClient.GetSocketEvent();if(client!=null){Console.WriteLine($"2 + 3 = {awaitclient.InterfaceController.AddAsync(2,3)}");Console.WriteLine($"1 + 2 = {client.InterfaceController.Add(1,2)}");Console.WriteLine("Completed");}}
  1. 接口对称 API
  2. 数据序列化
  3. 线程调度策略
  4. 鉴权与传输数据编码
  5. 静态代码生成
  6. 服务注册与推送
  7. 反向 RPC 服务
  8. 客户端 .NET NativeAOT
  9. 远程 Lambda 表达式

内存数据库

数据库服务配置定义

/// <summary>/// 内存数据库服务配置/// </summary>internalsealedclassServiceConfig:AutoCSer.CommandService.StreamPersistenceMemoryDatabaseServiceConfig{/// <summary>/// 测试环境删除 15 分钟以前的历史持久化文件,生产环境根据实际需求处理/// </summary>/// <returns></returns>publicoverrideDateTimeGetRemoveHistoryFileTime(){returnAutoCSer.Threading.SecondTimer.UtcNow.AddMinutes(-15);}/// <summary>/// 测试环境每分钟执行一次删除历史持久化文件操作,生产环境根据实际需求处理/// </summary>/// <param name="service"></param>/// <returns></returns>publicoverridevoidRemoveHistoryFile(AutoCSer.CommandService.StreamPersistenceMemoryDatabaseServiceservice){newAutoCSer.CommandService.StreamPersistenceMemoryDatabase.RemoveHistoryFile(service).Remove(newAutoCSer.Threading.TaskRunTimer(60.0)).AutoCSerExtensions().Catch();}/// <summary>/// 重建文件大小设置为至少 10MB/// </summary>/// <param name="service"></param>/// <returns></returns>publicoverrideboolCheckRebuild(AutoCSer.CommandService.StreamPersistenceMemoryDatabaseServiceservice){longpersistencePosition=service.GetPersistencePosition();return(persistencePosition>>1)>=service.RebuildSnapshotPosition&&persistencePosition>10<<20;}}

创建数据库服务实例

AutoCSer.Document.MemoryDatabaseNode.Server.ServiceConfigdatabaseServiceConfig=newAutoCSer.Document.MemoryDatabaseNode.Server.ServiceConfig{PersistencePath=Path.Combine(AutoCSer.TestCase.Common.Config.AutoCSerTemporaryFilePath,nameof(AutoCSer.Document.MemoryDatabaseNode)),PersistenceSwitchPath=Path.Combine(AutoCSer.TestCase.Common.Config.AutoCSerTemporaryFilePath,nameof(AutoCSer.Document.MemoryDatabaseNode)+nameof(AutoCSer.Document.MemoryDatabaseNode.Server.ServiceConfig.PersistenceSwitchPath))};AutoCSer.CommandService.StreamPersistenceMemoryDatabaseServicedatabaseService=databaseServiceConfig.Create();

创建 RPC 服务

AutoCSer.Net.CommandServerConfigcommandServerConfig=newAutoCSer.Net.CommandServerConfig{Host=newAutoCSer.Net.HostEndPoint((ushort)AutoCSer.TestCase.Common.CommandServerPortEnum.Document),};awaitusing(AutoCSer.Net.CommandListenercommandListener=newAutoCSer.Net.CommandListenerBuilder(0).Append<AutoCSer.CommandService.IStreamPersistenceMemoryDatabaseService>(databaseService).CreateCommandListener(commandServerConfig)){if(awaitcommandListener.Start()){Console.ReadKey();}}

定义 RPC 客户端实例

/// <summary>/// RPC 客户端实例/// </summary>internalsealedclassCommandClientSocketEvent:AutoCSer.Net.CommandClientSocketEventTask<CommandClientSocketEvent>,AutoCSer.CommandService.IStreamPersistenceMemoryDatabaseClientSocketEvent{/// <summary>/// 内存数据库客户端接口实例/// </summary>[AllowNull]publicAutoCSer.CommandService.IStreamPersistenceMemoryDatabaseClientStreamPersistenceMemoryDatabaseClient{get;privateset;}/// <summary>/// 客户端控制器创建参数集合,用于命令客户端套接字初始化是创建客户端控制器对象,同时也用于命令客户端套接字事件在通过认证 API 之后根据客户端控制器接口类型自动绑定控制器属性/// </summary>publicoverrideIEnumerable<AutoCSer.Net.CommandClientControllerCreatorParameter>ControllerCreatorParameters{get{yieldreturnnewAutoCSer.Net.CommandClientControllerCreatorParameter(typeof(AutoCSer.CommandService.IStreamPersistenceMemoryDatabaseService),typeof(AutoCSer.CommandService.IStreamPersistenceMemoryDatabaseClient));//yield return new AutoCSer.Net.CommandClientControllerCreatorParameter(typeof(AutoCSer.CommandService.StreamPersistenceMemoryDatabase.IReadWriteQueueService), typeof(AutoCSer.CommandService.IStreamPersistenceMemoryDatabaseClient));}}/// <summary>/// RPC 客户端实例/// </summary>/// <param name="client">命令客户端</param>publicCommandClientSocketEvent(AutoCSer.Net.CommandClientclient):base(client){}}

创建 RPC 客户端

/// <summary>/// 内存数据库客户端单例/// </summary>publicstaticreadonlyAutoCSer.CommandService.StreamPersistenceMemoryDatabaseClientCache<CommandClientSocketEvent>StreamPersistenceMemoryDatabaseClientCache=newAutoCSer.CommandService.StreamPersistenceMemoryDatabaseClientCache<CommandClientSocketEvent>(newAutoCSer.Net.CommandClientConfig{Host=newAutoCSer.Net.HostEndPoint((ushort)AutoCSer.TestCase.Common.CommandServerPortEnum.Document),GetSocketEventDelegate=(client)=>newCommandClientSocketEvent(client)});
  1. 内存数据库简介
  2. 内置数据结构节点
  3. 自定义节点
  4. 本地嵌入模式
  5. 静态代码生成
  6. 服务注册与推送
  7. 本地嵌入模式 .NET NativeAOT

Ask DeepWiki

About

AutoCSer is an out-of-the-box RPC framework implemented by C#, which has high concurrency, high throughput and other high performance characteristics, and is an ideal distributed application infrastructure.

Topics

Resources

Stars

37 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages