python RPC框架
文章目录
- python RPC框架
- RPC 介绍
- RPC 的通讯方式
- Python中RPC框架
- SimpleXMLRPCServer使用
- 服务端
- 客户端
- ZeroRPC使用
- 服务端
- 客户端
python RPC框架
RPC 介绍
RPC 是指 远程过程调用, 简单点说就是 两台服务器 A,B 一个应用部署在 A 服务器上,想要调用 B 服务器上应用提供的函数或方法, 由于不在一个内存空间,不能直接调用。需要通过网络来表达调用的语义 和 传达调用的数据, 放回的结果
RPC 的通讯方式
- RPC 主要通过在客户端和服务端之间建立 TCP 连接,远程过程调用的所有交换的数据都在这个连接里面传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。
- RPC 通信,需要解决寻址问题。即 A 服务器上的应用怎么告诉底层的RPC 框架,如何连接到B 服务,以及特定的端口号,方法的名称等待。比如基于 Web 服务协议栈的 RPC,就要提供一个 endpoint URI,或者是从 UDDI 服务上查找。如果是 RMI 调用的话,还需要一个 RMI Registry 来注册服务的地址。
- 在调用过程中, 方法的参数也需要通过底层的网络协议如TCP 传递到B 服务器,由于网络协议是基于二进制的,内存中的参数的值要序列化成二进制的形式,也就是序列化(Serialize)或编组(marshal),通过寻址和传输将序列化的二进制发送给 B 服务器。
- B 服务器收到请求后,需要对参数进行反序列化(序列化的逆操作),恢复为内存中的表达方式,然后找到对应的方法(寻址的一部分)进行本地调用,然后得到返回值。
- 返回值还要发送回服务器 A 上的应用,也要经过序列化的方式发送,服务器 A 接到后,再反序列化,恢复为内存中的表达方式,交给 A 服务器上的应用。
Python中RPC框架
自带的:SimpleXMLRPCServer(数据包大,速度慢)
第三方:ZeroRPC(底层使用ZeroMQ和MessagePack,速度快,响应时间短,并发高),grpc(谷歌推出支持夸语言)
SimpleXMLRPCServer使用
服务端
from xmlrpc.server import SimpleXMLRPCServer
class RPCServer(object):def __init__(self):super(RPCServer, self).__init__()print(self)self.send_data = 'lqz nb'self.recv_data = Nonedef getObj(self):print('get data')return self.send_datadef sendObj(self, data):print('send data')self.recv_data = dataprint(self.recv_data)
# SimpleXMLRPCServer
server = SimpleXMLRPCServer(('localhost',4242), allow_none=True)
server.register_introspection_functions()
server.register_instance(RPCServer())
server.serve_forever()
客户端
import time
from xmlrpc.client import ServerProxy# SimpleXMLRPCServer
def xmlrpc_client():print('xmlrpc client')c = ServerProxy('http://localhost:4242')data = 'lxx nb'start = time.clock()for i in range(500):a=c.getObj()print(a)for i in range(500):c.sendObj(data)print('xmlrpc total time %s' % (time.clock() - start))if __name__ == '__main__':xmlrpc_client()
ZeroRPC使用
服务端
import zerorpcclass RPCServer(object):def __init__(self):super(RPCServer, self).__init__()print(self)self.send_data = 'lxx nb'self.recv_data = Nonedef getObj(self):print('get data')return self.send_datadef sendObj(self, data):print('send data')self.recv_data = dataprint(self.recv_data)
# zerorpc
s = zerorpc.Server(RPCServer())
s.bind('tcp://0.0.0.0:4243')
s.run()
客户端
import zerorpc
import time
# zerorpc
def zerorpc_client():print('zerorpc client')c = zerorpc.Client()c.connect('tcp://127.0.0.1:4243')data = 'lqz nb'start = time.clock()for i in range(500):a=c.getObj()print(a)for i in range(500):c.sendObj(data)print('total time %s' % (time.clock() - start))if __name__ == '__main__':zerorpc_client()
python RPC框架相关推荐
- python rpc框架-python使用rpc框架gRPC的方法
概述 gRPC 是谷歌开源的一个rpc(远程程序调用)框架,可以轻松实现跨语言,跨平台编程,其采用gRPC协议(基于HTTP2). rpc: remote procedure call, 翻译过来就是 ...
- python rpc微服务框架_grpc的微服务探索实践
对于微服务的实践,一般都是基于Java和Golang的,博主最近研究了下基于Python的微服务实践,现在通过一个简单的服务来分析Python技术栈的微服务实践 技术栈:Python3 + grpc ...
- python实现rpc框架_使用Python实现RPC框架
前言 本文将会使用Python实现一个最简单的RPC框架,玩具向,不具有实用意义,但可以让你清醒的理解RPC框架的几个组成部分,只是比看Python自带的xmlrpc清晰. 本文需要一点Python ...
- python go rpc_Go实现简易RPC框架的方法步骤
本文旨在讲述 RPC 框架设计中的几个核心问题及其解决方法,并基于 Golang 反射技术,构建了一个简易的 RPC 框架. RPC RPC(Remote Procedure Call),即远程过程调 ...
- 最受欢迎 Top 12 Python 开源框架,你都用过吗?
作者 | 学Python的阿勇 责编 | 夕颜 出品 | CSDN博客 今天给大家带来了12个在GitHub等开源网站中最受欢迎的Python开源框架.如果你正在学习python,那么这12个开源框架 ...
- 花了一个星期,我终于把RPC框架整明白了!
" RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想. 作者:李金葵,来自:51CTO技术栈 R ...
- 重磅消息:蚂蚁金服推出RPC框架
2019独角兽企业重金招聘Python工程师标准>>> 先附上框架地址 https://github.com/alipay/sofa-boot https://github.com/ ...
- 一个简单RPC框架是怎样炼成的(II)——制定RPC消息
开局篇我们说了,RPC框架的四个核心内容 RPC数据的传输. RPC消息 协议 RPC服务注冊 RPC消息处理 以下,我们先看一个普通的过程调用 class Client(object):def __ ...
- 阿里首席架构师科普RPC框架是什么
2019独角兽企业重金招聘Python工程师标准>>> RPC概念及分类 RPC全称为Remote Procedure Call,翻译过来为"远程过程调用".目前 ...
最新文章
- python做马尔科夫模型预测法_隐马尔可夫模型的前向算法和后向算法理解与实现(Python)...
- springboot2.1.5集成finereport10.0过程中:手动安装本地jar包到maven仓库
- 你还在Java8中使用循环语句吗?
- python列表转换成数字_python 字母转成数字Python操作列表的常用方法总结
- 101次从入门到放弃,终于找到一个数据分析利器!
- JavaScript——面向对象之继承(原型对象)与多态(重载、重写)
- Tomcat软连接访问配置(symbol link)
- 中低频量化交易策略研发03_注意事项与应对
- 第九章 深度强化学习-Double DQN
- 使用Faker.NET仿造数据
- java毕业设计软件技术课程学习系统设计与实现源码+lw文档+mybatis+系统+mysql数据库+调试
- 细说ConcurrentHashMap扩容规则
- 【数学】指数函数与对数函数的导数证明
- 计算机无法加载这个项目,Windows系统中出现无法加载这个硬件的设备驱动程序(代码39)的解决方法介绍 win7...
- 管理API访问令牌的最佳安全实践
- 一直激励我的一个故事--驴子的故事
- oracle高可用培训,企业级Oracle数据库高可用性(OracleDataGuard)DBA培训视频全集
- 暗影精灵 6 Plus 快速上手 大量游戏实测
- 计算机南北桥芯片的作用
- Microsoft SQL Server 2000 Service Pack 3a