c# RPC框架的使用简介
写在前面:
RPC,听过很有段时间了,但是一直都不太清楚是干嘛的,今天我们来捋一捋。
解释:
【Remote Procedure Call Protocol】远程过程调用(就是说,A程序要调用一个b方法,然而这个b方法的实现在B程序内部,B程序还可能和A不在一个电脑上面,怎么调用?http可以调用/rpc也可以,让他像调用本地方法一样调用)
使用初探:
用了一下市面上的,rpc框架,步骤如下:
1、写一个基本的代码,告诉有哪些方法。
2、然后服务端集成,
3、客户端集成,
4、OK调用生效了。
感觉有点像TCP在传输数据,从A服务器传递,传递类名,方法名,参数,值,然后B服务器拿到数据,计算结果,然后把数据在回传给A。。。这样理解一下的话,就很简单了。
下面动手写一个吧。
自己动手:
服务端:
既然服务端是实现的地方,我们写一个算是实现类的方法试试:写了一个接口和一个实现,为了演示效果,写了两个方法。
OK,服务端的大部分完成了。
然后就是TCP服务器,TCP服务器对大家来说,就太简单不过了,不就是创建一个Socket对象,绑定一个端口,获取客户端请求的Socket对象,然后和他交互么。没啥多说的。
我们假定,所有的客户端数据,可以在一个请求包里面解析掉,因为如果一次的数据接收不能解析,那就还要添加一个大小了,客户端要告诉我你给我了多少消息,然后我再读取指定数据,拿到所有的内容
这里创建,一个ServiceHelpers来帮助对,真实算法的调用。如下:
解析的类很简单,因为这里创建的数据结构很简单。
按照我们的约定,这里,对数据按照我定义的方式来进行解包即可。
服务器就完成了,是不是很简单。当然客户端也需要按照一样的方式处理打包即可
客户端:
客户端就很简单了,只需要连接到服务器,通过我们自动生成的代码(这里没有写自动生成,就手动了),然后就直接可以返回结果了
上面直接调用了,接口,至于接口的实现,这里的步骤就三个:1、构造需要请求的数据,2、连接服务器并发送数据,3、接收返回内容,并解析结果。
接口的定义沿用服务端的即可。说明一点:MyServiceProxy这个类,这里我是手写的,真实的环境,这个类,应该是由我们定义的某种格式,然后写一个代码生成器,让他自动生成,然后就可以不用费力,兼容所有的调用了,
当然这里只支持了四种类型,我们还可以扩充更多类型,只需要找到传递数据的方式即可。譬如一种对象,我们不知道如何传递,可以直接把对象定义成一个json字符串,或者序列化成二进制,只要两端,都知道了这个类型,就可以了。
相当于设计模式里面的(约定大于配置了)
知识点梳理
这里有一些知识点,是不常用的,这里梳理出来了。
1、MemoryStream ms = new MemoryStream(buffer); BinaryReader br = new BinaryReader(ms); 通过binaryReader的方式,可以像C/C++指针一样取数据
2、var types = Assembly.GetExecutingAssembly().GetTypes(); 通过Assembly可以得到当前exe或者dll的所有类型(类接口都是一种类型)
3、Object thisObj = Activator.CreateInstance(inter_type); 通过Activator调用默认构造,实现对象的初始化
总结:
这样一个rpc框架,本身并没有优化,还有很多地方是可以优化的,比如:缓存(不用每次遍历查询类型等),udp支持(这里仅仅只是对tcp进行了支持),
自动代码生成(定义一种规范和支持程序,进行支持),错误重试,数据唯一性,数据包的大小处理,等等,所以想要开发一个易用的框架,还需要不断演进,这里只是对他的原理进行了简单剖析。
最后还原大家拍砖。。。。。动起来
代码:git:https://github.com/supperlitt/tcp_all
以上就是c# RPC框架的使用简介的详细内容,更多关于c# RPC框架的资料请关注得得之家其它相关文章!