位置: 编程技术 - 正文

python如何通过protobuf实现rpc(python如何通过键找对应值)

编辑:rootadmin

推荐整理分享python如何通过protobuf实现rpc(python如何通过键找对应值),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python如何通过类创建对象,python如何通过键值找所在字典的数据,python如何通过类创建对象,python如何通过下标获取元素,python如何通过值找键,python如何通过类创建对象,python如何通过值找键,python如何通过类创建对象,内容如对您有帮助,希望把文章链接给更多的朋友!

由于项目组现在用的rpc是基于google protobuf rpc协议实现的,所以花了点时间了解下protobuf rpc。rpc对于做分布式系统的人来说肯定不陌生,对于rpc不了解的童鞋可以自行google,这里只是做个简单的介绍。rpc的主要功能是让分布式系统的实现更为简单,为提供强大的远程调用而不损失本地调用语义的简洁性。为了实现这个目标,rpc框架需要提供一种透明调用机制让使用者不必显示区分本地调用还是远程调用。rpc架构涉及的组件如下:

客户方像调用本地方法一样去调用远程接口方法,RPC 框架提供接口的代理实现,实际的调用将委托给代理RpcProxy 。代理封装调用信息并将调用转交给RpcInvoker 去实际执行。在客户端的RpcInvoker 通过连接器RpcConnector 去维持与服务端的通道RpcChannel,并使用RpcProtocol 执行协议编码(encode)并将编码后的请求消息通过通道发送给服务方。RPC 服务端接收器 RpcAcceptor 接收客户端的调用请求,同样使用RpcProtocol 执行协议解码(decode)。解码后的调用信息传递给RpcProcessor 去控制处理调用过程,最后再委托调用给RpcInvoker 去实际执行并返回调用结果。

protobuf rpc在上面组件中主要扮演RpcProtocol的角色,使得我们省去了协议的设计,并且protobuf协议在编码和空间效率都是上非常高效的,这也是很多公司采用protobuf作为数据序列化和通信协议的原因。同时protobuf rpc定义了一个抽象的rpc框架,如下图所示:

RpcServiceStub和RpcService类是protobuf编译器根据proto定义生成的类,RpcService定义了服务端暴露给客户端的函数接口,具体实现需要用户自己继承这个类来实现。RpcServiceStub定义了服务端暴露函数的描述,并将客户端对RpcServiceStub中函数的调用统一转换到调用RpcChannel中的CallMethod方法,CallMethod通过RpcServiceStub传过来的函数描述符和函数参数对该次rpc调用进行encode,最终通过RpcConnecor发送给服务方。对方以客户端相反的过程最终调用RpcSerivice中定义的函数。事实上,protobuf rpc的框架只是RpcChannel中定义了空的CallMethod,所以具体怎样进行encode和调用RpcConnector都要自己实现。RpcConnector在protobuf中没有定义,所以这个完成由用户自己实现,它的作用就是收发rpc消息包。在服务端,RpcChannel通过调用RpcService中的CallMethod来具体调用RpcService中暴露给客户端的函数。

python如何通过protobuf实现rpc(python如何通过键找对应值)

介绍了这么多,对于怎么样用protobuf rpc来实现一个rpc肯定还是一头雾水吧,下面就用protobuf rpc来实现一个简单的python版rpc demo吧。

下面直接给出demo描述PRC的proto文件,至于proto文件的编写规则可以参考protobuf官网。

common.proto文件:

game_service.proto文件:

common.proto文件描述了RPC中收发的消息;game_service.proto描述了服务器导出的connect_server函数,该函数接受RequestMessage对象作为参数,并返回RequestMessage对象。在使用PRC协议时,必须加上option py_generic_services = true;可选项,要不然编译器不会生成包含connect_server函数的GameService描述。

使用编译器protoc编译proto文件,具体命令为:protoc.exe --python_out=. game_service.proto编译后生成的文件为game_service_pb2.py,该文件主要是实现了GameService和GameService_Stub类。GameService_Stub类用于客户端调用者来调用GameService的服务。前面已经说了,在客户端,RpcChannel只实现了一个空的CallMethod,所以需要继承RpcChannel重新这个函数来encode消息和发送消息。在服务端RpcChannel需要调用CallMethod来调用Service中的函数。具体实现如下:

最后就是继承GameService,并实现connect_server函数了。

至于用于网络收发消息的RpcConnector,可以使用python的asyncore库实现,具体实现在这就不讨论了。

从上面的实现来看,protobuf rpc的实现主要包括编写proto文件并编译生成对应的service_pb2文件,继承RpcChannel并实现CallMethod和调用Service的CallMethod,继承Service来实现暴露给客户端的函数。

标签: python如何通过键找对应值

本文链接地址:https://www.jiuchutong.com/biancheng/383386.html 转载请保留说明!

上一篇:使用Python保存网页上的图片或者保存页面为截图(python3.5怎么保存)

下一篇:Django Admin实现上传图片校验功能(django admin form)

  • 留抵税额做进项转出怎么做分录
  • 国家税务总局操作指引
  • 火车票报销抵扣税率
  • 电子承兑被拒付(可拒付追索)
  • 普通发票需要进项税额转出吗
  • 进项税需要转出吗
  • 企业所得税清算报备表清算结束日
  • 旧房转让土地增值税计算案例
  • 长期股权投资成本法转权益法追溯调整
  • 劳保费用可以开专票吗
  • 补充医疗保险 个人账户可以报销吗
  • 库存商品盘盈盘亏表
  • 关税不可以抵扣吗
  • 物业公司代收供暖费,可以开发票吗
  • 代扣代缴个人所得税手续费是否缴纳增值税
  • 计提所得税是在哪个科目
  • 企业并购重组有哪些
  • 租赁固定资产折旧计入
  • .车船税不在汽车保险里如何入账
  • 房屋出租收入是多少
  • 保税区开出的专票可以抵扣吗
  • 双链表的删除操作算法,两条改链语句能调换位置吗?
  • PHP:session_encode()的用法_Session函数
  • cmdkill进程
  • 收到借款金额
  • vue click触发两次
  • 两个岗位 如何选择
  • 应收账款如何做会计分录
  • 向银行借入的资金属于什么
  • 解决laravel 5.1报错:No supported encrypter found的办法
  • php文件上传用什么请求方法
  • vue3.0启动命令
  • New Bing怼人、说谎、PUA,ChatGPT已经开始胡言乱语了
  • 退货款现金流量表填什么?
  • 购扶贫产品怎么记账
  • 当月已付款, 没收到发票怎么做账
  • 金蝶系统结账之后反结账
  • 企业办理税务注销需要什么资料
  • 小规模纳税人应交增值税明细科目
  • 小规模增值税纳税人优惠政策
  • 固定资产登记在三栏明细账可以吗
  • 金税盘锁死341101
  • 应收分保未到期责任准备金是什么科目
  • 房地产公司项目开发流程
  • 关于餐饮行业
  • 坏账准备贷方余额期末如何处理
  • 关于外币折算会计处理的表述中
  • 房地产企业按简易计税
  • 报销烟酒的分录是什么
  • 先开收据再打款
  • 公司现金支票取钱需要带什么资料
  • 财务月末暂估成本是什么
  • sql server内存怎么设置合理
  • 完美解决索尼电视arc无声音
  • sqlserver数据库中的null值空值表示的是空格或零值
  • windows下安装nas
  • windows mobile应用下载
  • linux虚拟机基本操作
  • 电脑提示Windows照片查看器无法打开此图片
  • winxp 共享设置
  • 升级ubuntu
  • linux 根目录
  • winxp内存不能为read
  • mac os固件下载
  • SIMETER.EXE - SIMETER是什么进程 有什么用
  • Win7如何关闭Smartscreen筛选器?Win7关闭Smartscreen筛选器的方法
  • cocos creator 优化 drawcall 合并
  • android从服务器获取数据
  • python图像移动
  • jquery选择器的使用
  • JQuery实现Ajax加载图片的方法
  • 如何用javascript
  • unity-x
  • 安卓开发速成
  • 纳税申报指什么意思
  • 国家税务总局公告2017年第21号
  • 深圳个体户不注销的后果
  • 国税新规
  • 江苏电子税务局电话
  • 租赁发票交多少税费
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设