一、前言大家好,我是安国!RPC,整个过程就是RemoteProcedureCall,是进程间的一种通信方式。它采用“服务器/客户端”模式,是一种请求-响应模型。服务器端负责提供服务程序,响应请求具体实现逻辑,客户端负责请求调用主流的RPC框架,包括:阿里的Dubbo,Facebook的Thrift,谷歌的gRpc,新浪微博的MotanGolang生态rpcx,其中gRpc和Thrift是跨语言的RPC服务框架,Thrift比Thrift性能更高.本文以Thrift为例,谈谈在Python2中使用RPC的过程。不同语言之间高效透明的通信thriftpy2是基于Thrift的二次封装,用它来写RPC更加方便快捷项目地址:https://github.com/Thriftpy/t...首先,我们都是在虚拟环境下,安装依赖包#安装依赖pip3installthriftpy2然后,如果是Windows,建议在Pycharm中安装thrift插件PS:这个插件可以方便我们写Thrift通信文件。下载地址:https://plugins.jetbrains.com...3。实战首先,根据需求编写Thrift通信文件。例如文件中定义了2个无参数方法函数pingloginlogin包含两个参数:username,password#foo.thriftservicePingPong{stringping(),stringlogin(1:stringusername,2:stringpassword)}然后,写入server代码根据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('获取client传递的参数,username:',username,",password:",password)return'登录成功!'#创建服务,指定本地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.210',90)#调用通信文件中定义的方法(实际是调用服务端的方法)print(client.ping())print(client.login('root','pwd'))最后分别运行服务端和客户端的代码,使用WireShark抓包分析。可以找到服务器与客户端的通信方式和数据传输过程。WireShark的使用可以参考这篇文章:当爬虫遇到Socket,别慌,肝完了!4、在最终的企业项目中,常用的HTTP具有简单、易开发、易上手等特点,是主流的数据传输协议。与HTTP或H2相比,RPC的主要优势体现在安全性高、性能消耗低、传输效率高、服务治理方便,因此我们可以根据实际项目需要选择合理的数据通信方式。如果觉得文章还不错,请点赞、分享、留言,因为这将是我继续输出更多优质文章的最强大动力!
