当前位置: 首页 > 科技观察

PythonRPC不会?看看这篇文章

时间:2023-03-13 01:56:26 科技观察

本文转载自微信公众号《AirPython》,作者郭兴安。转载本文请联系AirPython公众号.一、前言大家好,我是安国!RPC,整个过程就是RemoteProcedureCall,是进程间的一种通信方式。它采用“服务器/客户端”模式,是一种请求-响应模型。服务端负责提供服务程序和响应具体实现逻辑的请求。客户端负责请求调用主流RPC框架,包括:阿里的Dubbo、Facebook的Thrift、Google的gRpc、新浪微博的MotanGolang生态rpcx,其中gRpc和Thrift是跨语言的RPC服务框架,Thrift比Thrift性能更高文章以Thrift为例,讲讲在Python2中使用RPC的过程。不同语言的客户端和服务器。thriftpy2是基于Thrift的二次包。用它写RPC更方便快捷。项目地址:https://github。com/Thriftpy/thriftpy2首先,我们在虚拟环境中安装依赖包#InstallDependencypip3installthriftpy2然后,如果是Windows,建议在Pycharm中安装thrift插件PS:这个插件可以方便我们写Thrift通讯文件下载地址:https://plugins.jetbrains.com/plugin/7331-thrift-support三、实战首先,根据需求编写一个Thrift通讯文件。比如这个文件定义了两个没有参数的方法functionpingloginlogin包含两个参数:username,password#foo.thriftservicePingPong{stringping(),stringlogin(1:stringusername,2:stringpassword)}然后根据Thrift通信文件中定义的方法,编写具体实现逻辑创建服务对象,指定绑定的ip地址和端口号,启动服务并监听消息#rcp_server.pyimportthriftpy2fromthriftpy2.rpcimportmake_server#读取通信配置文件pingpong_thrift=thriftpy2.load("foo.thrift",module_name="pingpong_thrift")classDispatcher(object):"""根据通信配置文件中定义的方法,重写实现方法"""defping(self):"""Ping:return:"""return"pong"deflogin(self,username,password):"""login:paramusername:username:parampassword:password:return:"""print('获取客户端传过来的参数,用户名:',username,",password:",password)返回'登录成功!'#创建服务,指定本地ip地址和监听端口号server=make_server(pingpong_thrift.PingPong,Dispatcher(),'192.168.40.217',9000)#启动服务并监听server.serve()然后,写入这里的客户端代码,根据服务端提供的ip地址和端口号,创建一个客户端连接对象,调用通信文件中定义的方法PS:如果客户端是远程执行,需要把Thrift通信文件放在同一目录并执行#rcp_client。pyimportthriftpy2fromthriftpy2.rpcimportmake_client#读取通信配置文件pingpong_thrift=thriftpy2.load("foo.thrift",module_name="pingpong_thrift")#创建客户端client=make_client(pingpong_thrift.PingPong,'192.168.40.217',9000)#调用通信方法文件中定义(实际调用服务端的方法)print(client.ping())print(client.login('root','pwd'))最后分别运行服务端和客户端的代码,使用WireShark分析数据包,找出服务端和客户端的通信方式和数据传输过程客户。4.最终企业在项目中,常用的HTTP具有简单、易开发、易上手等特点,是主流的数据传输协议。与HTTP或H2相比,RPC的主要优势体现在安全性高、性能消耗低、传输效率高、服务管理方便,所以我们可以根据实际项目需求选择合理的数据通信方式