高性能的 TCP 服务框架是 AutoCSer 的核心组件,需要引用 AutoCSer\Packet\*\AutoCSer.dll。
TCP 接口服务基于 Emit 动态生成代理类型,相对于使用静态代码生成TCP 函数服务框架上手简单,但功能支持相对简单而且吞吐性能测试相对较低一点点。
框架根据应用场景分为内部服务开放服务,两种服务的默认配置参数与防御攻击策略不同。
内部服务默认配置:数据缓冲区 64KB,最大发送数据缓冲区 1MB,验证超时 4s,客户端失败重连时间 10ms,批量输出休眠等待时间 0ms,使用二进制序列化,服务端开启线程输出,客户端启动时创建连接,支持服务注册
开放服务默认配置:数据缓冲区 8KB,服务端最大发送数据缓冲区 8KB,验证超时 9s,客户端失败重连时间 1s,批量输出休眠等待时间 1ms,使用 JSON 序列化,服务端同步输出,客户端在第一次访问时创建连接,客户端最大自定义数据包为 16KB
注意:interface 接口定义必须使用 public 修饰,而且对于其它程序集可见。

内部服务

. 同步函数支持 ref / out 参数。

参考示例 AutoCSer\Example\TcpInterfaceServer\RefOut.cs

. 对于没有返回值且可靠性要求不高的需求,同步函数支持仅发送请求模式(无需服务端响应),返回值类型必须为 void,不支持 ref / out 参数。

参考示例 AutoCSer\Example\TcpInterfaceServer\SendOnly.cs

. 支持异步回调,返回值类型必须为 void,不支持 ref / out 参数,最后一个参数类型必须是委托 Func<AutoCSer.Net.TcpServer.ReturnValue, bool> 或者 Func<AutoCSer.Net.TcpServer.ReturnValue<returnType>, bool>
服务端必须保证该回调委托被执行,该委托的返回值表示回调数据是否成功添加到发送队列中,失败可能意味着该连接已经关闭;对于客户端而言该返回值没有意义。

参考示例 AutoCSer\Example\TcpInterfaceServer\Asynchronous.cs

. 支持异步回调注册,也就是说客户端一个请求,服务器端可以任意多次回调回应。
返回值类型必须为 AutoCSer.Net.TcpServer.KeepCallback,对于服务端而言该返回值没有意义。

参考示例 AutoCSer\Example\TcpInterfaceServer\KeepCallback.cs

. 支持接口继承与显示接口实现

参考示例 AutoCSer\Example\TcpInterfaceServer\Inherit.cs

性能测试项目
AutoCSer\TestCase\TcpServerPerformance\AutoCSer.TestCase.TcpInternalServerPerformance.Emit
AutoCSer\TestCase\TcpClientPerformance\AutoCSer.TestCase.TcpInternalClientPerformance.Emit

开放服务

. 同步函数支持 ref / out 参数。

参考示例 AutoCSer\Example\TcpInterfaceOpenServer\RefOut.cs

. 对于没有返回值且可靠性要求不高的需求,同步函数支持仅发送请求模式(无需服务端响应),返回值类型必须为 void,不支持 ref / out 参数。

参考示例 AutoCSer\Example\TcpInterfaceOpenServer\SendOnly.cs

. 支持异步回调,返回值类型必须为 void,不支持 ref / out 参数,最后一个参数类型必须是委托 Func<AutoCSer.Net.TcpServer.ReturnValue, bool> 或者 Func<AutoCSer.Net.TcpServer.ReturnValue<returnType>, bool>
服务端必须保证该回调委托被执行,该委托的返回值表示回调数据是否成功添加到发送队列中,失败可能意味着该连接已经关闭;对于客户端而言该返回值没有意义。

参考示例 AutoCSer\Example\TcpInterfaceOpenServer\Asynchronous.cs

. 支持异步回调注册,也就是说客户端一个请求,服务器端可以任意多次回调回应。
返回值类型必须为 AutoCSer.Net.TcpServer.KeepCallback,对于服务端而言该返回值没有意义。

参考示例 AutoCSer\Example\TcpInterfaceOpenServer\KeepCallback.cs

. 支持接口继承与显示接口实现

参考示例 AutoCSer\Example\TcpInterfaceOpenServer\Inherit.cs

性能测试项目
AutoCSer\TestCase\TcpServerPerformance\AutoCSer.TestCase.TcpOpenServerPerformance.Emit
AutoCSer\TestCase\TcpClientPerformance\AutoCSer.TestCase.TcpOpenClientPerformance.Emit