|
马上注册登陆,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?用户注册
x
相信大家对RPC协议都有一定的了解,并且或多或少都会在项目中涉及,但可能都和小编类似,都是直接使用平台封装的插件,对于其中的原理不是很了解,今天借此机会和大家分享下比较近接触的RPC框架-,一同聊聊那些知其然却不知其所以然的内容。?大家好,我是指北君。又是一周工作日的比较后一天,但也不要忘记努力。icp备案查询的相关资讯可以到我们网站了解一下,从专业角度出发为您解答相关问题,给您优质的服务!
吃得苦中苦,你长大开路虎,少壮不努力,你长大开夏利。
接下来开始进入正题~
?前言
相信大家对RPC协议都有一定的了解,并且或多或少都会在项目中涉及,但可能都和小编类似,都是直接使用平台封装的插件,对于其中的原理不是很了解,今天借此机会和大家分享下比较近接触的RPC框架-,一同聊聊那些知其然却不知其所以然的内容。
?概述RPC(RPC)远程过程调用协议,是一种本地可以通过络请求远程计算机,完成计算机间的数据内容的交互的协议,不需要了解络底层技术就可以速上手,使得开发更加容易,同时提升了交互体验效率。
为了方便开发,有很多基于RPC协议现的RPC框架,比如T、D,和本文即将要介绍的RPC。
?什么是RPCRPC是由开发的一种支跨平台(语言)、高性能、开源通用的RPC框架。它是基于HTTP20协议的,可以保持客户端与服务端长连接,基于二进制流(字节流)传输数据。客户端与服务端交互过程客户端(RPCS)调用A方法,发起RPC请求
请求内容使用P进行对象序列化压缩
服务端(RPCS)接收请求,解析请求内容,业务处理后返回
响应结果通过P进行对象序列化压缩
客户端接收响应,解析响应内容,比较终完成交互
?践案例
小编以版进行案例展示,其它语言类似,可自行测试
POM依赖
RPC官方提供完成的依赖配置,按照说明直接引用即可(依赖包含插件),版本仅供参考,也可选择其它版本。
!--RPC配置--III--I1290III-I1290III-I1290III-I1290!--插件--III--I061A::3110::${}AI-IA:---:1290::${}A-编写文件
小编使用的是3版本,需要注意固定的目录结构(*),否则会编译失败。文件有固定的编写格式,可以自行上搜索即可?
="3";包所在路径_="";__=;;声明服务和方法RS{查询并更新规则AD(RR)(RR);获取当前规则字典R(R)(R);}定义请求对象RR{RRPCDTO{32C=1;C=2;}RRPCDTO=1;32I=2;}定义响应对象RR{32=1;}R{}定义响应消息R{32C=1;C=2;}使用插件编译,双击执行(生成B,-P--:;生成具体接口,-P--:-)。小编只执行:命令,然后在目录(\\-\)下就找到了生成的文件,复制出来粘贴到项目执行目录下即可。编写接口现类
编译完后会生成RSG接口,接下来就是按照自己的业务需求编写逻辑即可。小编定义的两个接口分别是AD(更新规则)、R(查询规则)。具体现如下
继承生成的RSGRSIB现接口具体逻辑@CRGRPCSRSGRSIB{更新规则字典@OAD(RR,SORRO){RRPCDTO=RRPCDTO();RDTODTO=RDTO();BUP(RPCDTO,DTO);RRR=RRB()I(1)();ON(R);OC();}查询规则字典@OR(R,SORO){R=RB()RC(1)AC("2222")();ON();OC();}}服务端与客户端
服务端启动类
(S[])E{设置接口S=SBP(9999)S(RGRPCSI())()();S(S("GR服务端启动成功,端口号:%",));T();}日志---GR服务端启动成功,端口号:9999客户端启动类
(S[])E{1拿到一个通信的MCC=MCBA("",9999)P()();{2拿到道理对象RSGRSBSDS=RSGBS(C);RDR=RB()();3请求RDR=DSR(DR);4输出结果S(DRRC());}{5关闭,释放资源C();}}日志:-16:05:44628[---ELG-1-2]DEBUGNCH-[:0844792,L:127001:60973-R:127001:9999]INBOUNDDATA:I=3=0S==12=00000000070861203323232-16:05:44648[---ELG-1-2]DEBUGNCH-[:0844792,L:127001:60973-R:127001:9999]INBOUNDHEADERS:I=3=GH2RH[-:0]=0S=-输出结果-----111-16:05:44664[---ELG-1-2]DEBUGNCH-[:0844792,L:127001:60973-R:127001:9999]OUTBOUNDGO_AWAY:SI=0C=0=0=客户端日志输出结果即表示客户端通过RPC调用服务端成功,并返回结果。
?总结RPC本质上就是传统的C|S模型,这样看角色分的清楚,也很容易理解。
还有就是它很聪明的点是基于HTTP20协议的,而不是自己制定,这就对未来的络开发很友好,降低了门槛。
比较难上手的点在于文件的编写和使用,这部分需要插件等依赖,过程相对复杂,但也可能会出现工具或脚本,可以简化下这部分。但生成代码确是真香~减少了一部分工作量。? |
|