文章目录

  • python RPC框架
    • RPC 介绍
    • RPC 的通讯方式
    • Python中RPC框架
      • SimpleXMLRPCServer使用
        • 服务端
        • 客户端
      • ZeroRPC使用
        • 服务端
        • 客户端

python RPC框架

RPC 介绍

RPC 是指 远程过程调用, 简单点说就是 两台服务器 A,B 一个应用部署在 A 服务器上,想要调用 B 服务器上应用提供的函数或方法, 由于不在一个内存空间,不能直接调用。需要通过网络来表达调用的语义 和 传达调用的数据, 放回的结果

RPC 的通讯方式

  1. RPC 主要通过在客户端和服务端之间建立 TCP 连接,远程过程调用的所有交换的数据都在这个连接里面传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。
  2. RPC 通信,需要解决寻址问题。即 A 服务器上的应用怎么告诉底层的RPC 框架,如何连接到B 服务,以及特定的端口号,方法的名称等待。比如基于 Web 服务协议栈的 RPC,就要提供一个 endpoint URI,或者是从 UDDI 服务上查找。如果是 RMI 调用的话,还需要一个 RMI Registry 来注册服务的地址。
  3. 在调用过程中, 方法的参数也需要通过底层的网络协议如TCP 传递到B 服务器,由于网络协议是基于二进制的,内存中的参数的值要序列化成二进制的形式,也就是序列化(Serialize)或编组(marshal),通过寻址和传输将序列化的二进制发送给 B 服务器。
  4. B 服务器收到请求后,需要对参数进行反序列化(序列化的逆操作),恢复为内存中的表达方式,然后找到对应的方法(寻址的一部分)进行本地调用,然后得到返回值。
  5. 返回值还要发送回服务器 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框架相关推荐

  1. python rpc框架-python使用rpc框架gRPC的方法

    概述 gRPC 是谷歌开源的一个rpc(远程程序调用)框架,可以轻松实现跨语言,跨平台编程,其采用gRPC协议(基于HTTP2). rpc: remote procedure call, 翻译过来就是 ...

  2. python rpc微服务框架_grpc的微服务探索实践

    对于微服务的实践,一般都是基于Java和Golang的,博主最近研究了下基于Python的微服务实践,现在通过一个简单的服务来分析Python技术栈的微服务实践 技术栈:Python3 + grpc ...

  3. python实现rpc框架_使用Python实现RPC框架

    前言 本文将会使用Python实现一个最简单的RPC框架,玩具向,不具有实用意义,但可以让你清醒的理解RPC框架的几个组成部分,只是比看Python自带的xmlrpc清晰. 本文需要一点Python ...

  4. python go rpc_Go实现简易RPC框架的方法步骤

    本文旨在讲述 RPC 框架设计中的几个核心问题及其解决方法,并基于 Golang 反射技术,构建了一个简易的 RPC 框架. RPC RPC(Remote Procedure Call),即远程过程调 ...

  5. 最受欢迎 Top 12 Python 开源框架,你都用过吗?

    作者 | 学Python的阿勇 责编 | 夕颜 出品 | CSDN博客 今天给大家带来了12个在GitHub等开源网站中最受欢迎的Python开源框架.如果你正在学习python,那么这12个开源框架 ...

  6. 花了一个星期,我终于把RPC框架整明白了!

    " RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想. 作者:李金葵,来自:51CTO技术栈 R ...

  7. 重磅消息:蚂蚁金服推出RPC框架

    2019独角兽企业重金招聘Python工程师标准>>> 先附上框架地址 https://github.com/alipay/sofa-boot https://github.com/ ...

  8. 一个简单RPC框架是怎样炼成的(II)——制定RPC消息

    开局篇我们说了,RPC框架的四个核心内容 RPC数据的传输. RPC消息 协议 RPC服务注冊 RPC消息处理 以下,我们先看一个普通的过程调用 class Client(object):def __ ...

  9. 阿里首席架构师科普RPC框架是什么

    2019独角兽企业重金招聘Python工程师标准>>> RPC概念及分类 RPC全称为Remote Procedure Call,翻译过来为"远程过程调用".目前 ...

最新文章

  1. python做马尔科夫模型预测法_隐马尔可夫模型的前向算法和后向算法理解与实现(Python)...
  2. springboot2.1.5集成finereport10.0过程中:手动安装本地jar包到maven仓库
  3. 你还在Java8中使用循环语句吗?
  4. python列表转换成数字_python 字母转成数字Python操作列表的常用方法总结
  5. 101次从入门到放弃,终于找到一个数据分析利器!
  6. JavaScript——面向对象之继承(原型对象)与多态(重载、重写)
  7. Tomcat软连接访问配置(symbol link)
  8. 中低频量化交易策略研发03_注意事项与应对
  9. 第九章 深度强化学习-Double DQN
  10. 使用Faker.NET仿造数据
  11. java毕业设计软件技术课程学习系统设计与实现源码+lw文档+mybatis+系统+mysql数据库+调试
  12. 细说ConcurrentHashMap扩容规则
  13. 【数学】指数函数与对数函数的导数证明
  14. 计算机无法加载这个项目,Windows系统中出现无法加载这个硬件的设备驱动程序(代码39)的解决方法介绍 win7...
  15. 管理API访问令牌的最佳安全实践
  16. 一直激励我的一个故事--驴子的故事
  17. oracle高可用培训,企业级Oracle数据库高可用性(OracleDataGuard)DBA培训视频全集
  18. 暗影精灵 6 Plus 快速上手 大量游戏实测
  19. 计算机南北桥芯片的作用
  20. Microsoft SQL Server 2000 Service Pack 3a

热门文章

  1. List去重及使用jdk8语法操作list去重
  2. Java 集合转数组,数组转集合
  3. 系统调用与内存管理(sbrk、brk、mmap、munmap)
  4. 浅析脑血氧饱和度检测技术
  5. Idea打不了断点怎么解决
  6. Word2003入门动画教程139:自动套用格式(下)
  7. vivo平板或以渠道和用户体验致胜
  8. 【抢救攻略】/etc/passwd文件误删处理
  9. 为什么新支点聚合路由器具有高稳定性?
  10. MySQL高可用集群方案优劣对比