高性能的 TCP 服务框架是 AutoCSer 的核心组件,支持若干全局默认配置,需要引用 AutoCSer\Packet\*\AutoCSer.dll。
TCP 接口服务基于 Emit 动态生成代理类型,相对于使用静态代码生成的 TCP 函数服务框架上手简单,但功能支持相对简单,如果客户端与服务端共用同一个接口定义那么同异步模式只能保持一致。
框架根据应用场景分为内部服务与开放服务,两种服务的默认配置参数与防御攻击策略不同。
内部服务默认配置:数据缓冲区 64KB,最大发送数据缓冲区 1MB,验证超时 4s,客户端失败重连时间 10ms,批量输出休眠等待时间 0ms,使用二进制序列化,服务端开启线程输出,客户端启动时创建连接,支持服务注册。
开放服务默认配置:数据缓冲区 8KB,服务端最大发送数据缓冲区 8KB,验证超时 9s,客户端失败重连时间 1s,批量输出无等待时间,使用 JSON 序列化,服务端同步输出,客户端在第一次访问时创建连接,客户端最大自定义数据包为 16KB
注意:interface 接口定义必须使用 public 修饰,而且对于其它程序集可见。
. 同步函数支持 ref / out 参数。
. 对于没有返回值且可靠性要求不高的需求,同步函数支持仅发送请求模式(无需服务端响应),返回值类型必须为 void,不支持 ref / out 参数。
. 支持异步回调,返回值类型必须为 void,不支持 ref / out 参数,最后一个参数类型必须是委托 Func<AutoCSer.Net.TcpServer.ReturnValue, bool> 或者 Func<AutoCSer.Net.TcpServer.ReturnValue<returnType>, bool>
服务端必须保证该回调委托被执行,该委托的返回值表示回调数据是否成功添加到发送队列中,失败可能意味着该连接已经关闭;对于客户端而言该返回值没有意义。
. 客户端(不支持服务端)支持 await 异步模型,返回值参数类型必须为 AutoCSer.Net.TcpServer.Awaiter 或者 AutoCSer.Net.TcpServer.Emit.Awaite<returnType>。
. 支持异步回调注册,也就是说客户端一个请求,服务器端可以任意多次回调回应,服务端被动推送是典型的应用场景。
返回值类型必须为 AutoCSer.Net.TcpServer.KeepCallback,对于服务端而言该返回值没有意义。
. 支持接口继承与显示接口实现
. 集成支持远程表达式链
. 简单序列化模式,采用二进制序列化模式时,输入输出参数类型如果全部属于以下类型,将默认开启简单序列化模式以提升序列化性能,否则将使用支持循环引用与成员选择的通用二进制序列化。
bool, byte, sbyte, short, ushort, int, uint, long, ulong, float, double, decimal, char, DateTime, Guid, string
bool?, byte?, sbyte?, short?, ushort?, int?, uint?, long?, ulong?, float?, double?, decimal?, char?, DateTime?, Guid?, enum
性能测试项目
AutoCSer\TestCase\TcpServerPerformance\AutoCSer.TestCase.TcpInternalServerPerformance.Emit
AutoCSer\TestCase\TcpClientPerformance\AutoCSer.TestCase.TcpInternalClientPerformance.Emit
从测试结果看来 .NET Core 的吞吐性能有较大提升。
. 同步函数支持 ref / out 参数。
. 对于没有返回值且可靠性要求不高的需求,同步函数支持仅发送请求模式(无需服务端响应),返回值类型必须为 void,不支持 ref / out 参数。
. 支持异步回调,返回值类型必须为 void,不支持 ref / out 参数,最后一个参数类型必须是委托 Func<AutoCSer.Net.TcpServer.ReturnValue, bool> 或者 Func<AutoCSer.Net.TcpServer.ReturnValue<returnType>, bool>
服务端必须保证该回调委托被执行,该委托的返回值表示回调数据是否成功添加到发送队列中,失败可能意味着该连接已经关闭;对于客户端而言该返回值没有意义。
. 支持异步回调注册,也就是说客户端一个请求,服务器端可以任意多次回调回应,服务端被动推送是典型的应用场景。
返回值类型必须为 AutoCSer.Net.TcpServer.KeepCallback,对于服务端而言该返回值没有意义。
. 支持接口继承与显示接口实现
. 集成支持远程表达式链
. 简单序列化模式,采用二进制序列化模式时,输入输出参数类型如果全部属于以下类型,将默认开启简单序列化模式以提升序列化性能,否则将使用支持循环引用与成员选择的通用二进制序列化。
bool, byte, sbyte, short, ushort, int, uint, long, ulong, float, double, decimal, char, DateTime, Guid, string
bool?, byte?, sbyte?, short?, ushort?, int?, uint?, long?, ulong?, float?, double?, decimal?, char?, DateTime?, Guid?, enum
性能测试项目
AutoCSer\TestCase\TcpServerPerformance\AutoCSer.TestCase.TcpOpenServerPerformance.Emit
AutoCSer\TestCase\TcpClientPerformance\AutoCSer.TestCase.TcpOpenClientPerformance.Emit
从测试结果看来 .NET Core 的吞吐性能有一些提升。