生成、获取代理
定义
定义
命名空间:
TouchSocket.Rpc
TouchSocket.Rpc.JsonRpc
安装:
dotnet add package TouchSocket.Rpc
一、为什么要生成代理
使用Rpc的原则就是像使用本地方法一样,让开发者感觉不到任何的不同。
但是我们的Rpc预留的接口都是Invoke
函数。也就是每次调用都必须手动传入参数和返回值类型,即使有InvokeT
的扩展调用,也很容易出错。因为参数类型都是object
,所以可以无法进行良好的代码提示。
同时,当服务端更新时,例如:新增一个参数,或者修改了返回值类型,那么调用代码必须同步修改,不然就非常容易报错。
诸如此类的情况,会大大降低开发效率。
所以就必须把服务代理到本地,即生成调用接口代码,或者扩展调用代码。要实现此方式,常见的有三种,动态代理接口,静态织入,静态编译。三种方式殊途同归,最终都是构建本地数据结构,然后和远程通信。三种方式各有优缺,具体如下:
优缺点 | 动态代理接口 | 静态织入(源代码生成) | 静态编译 |
---|---|---|---|
优点 | 动态构建类,灵活、适应性强。 | 静态代码生成,自定义类参数自动生成,修改较灵活,调用效率高 | 自定义类参数自动生成,密封性强,安全性高,调用效率高。 |
缺点 | 调用效率较低,自定义类参数须自行构建,实现须IL支持,对调用平台有要求,例如:IOS不允许动态类生成,则不可使用。 | 项目代码管理难统一,强迫症猝死 | 服务一旦有破坏性升级,则必须重新替换dll,灵活性几乎为0。 |