大茂名网

 找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 150|回复: 0

[【编导】] 解析今天聊聊你不知道的gRPC2022/12/26 13:58:24

[复制链接]

2万

主题

2万

帖子

9万

积分

钻石元老

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

积分
98065
发表于 2022-12-26 13:58 | 显示全部楼层 |阅读模式

马上注册登陆,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?用户注册

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协议的,而不是自己制定,这就对未来的络开发很友好,降低了门槛。

比较难上手的点在于文件的编写和使用,这部分需要插件等依赖,过程相对复杂,但也可能会出现工具或脚本,可以简化下这部分。但生成代码确是真香~减少了一部分工作量。?
爱上大茂名,喜当大猫友,吃喝玩乐事,天天乐开怀!
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

QQ|客服:0668-2886677QQ:75281068|大茂微博|小黑屋|手机版|Archiver|大茂名网 ( 粤ICP备18149867号 )茂名市大茂科技有限公司 版权所有 

GMT+8, 2024-11-29 17:32 , Processed in 0.106925 second(s), 8 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表