基于xml的rpc调用

  1. rpcserver.py
from xmlrpc.server import SimpleXMLRPCServer

# python中类的命名方式遵循驼峰命名法
# 1. 没有出现url的映射
# 2. 没有出现编码和解码
# 3. 序列化和反序列化协议是:xml
class Calculate:
def add(self, x, y):
return x + y def multiply(self, x, y):
return x * y def subtract(self, x, y):
return abs(x - y) def divide(self, x, y):
return x / y obj = Calculate()
server = SimpleXMLRPCServer(("localhost", 8088))
# 将实例注册给rpc server
server.register_instance(obj)
print("Listening on port 8088")
server.serve_forever()

rpc服务通俗来讲:通过一定协议和方法使得调用远程计算机上的服务,就像调用本地服务一样。

  1. xml_rpc_client.py
from xmlrpc import client

# xmlrpc挺好用的
# rpc强调的是本地调用效果
# rpc在内部调用很多
server = client.ServerProxy("http://localhost:8088")
print(server.divide(2, 3))

基于json的rpc调用

  1. 安装

    pip install jsonrpclib

  2. json_rpc_server.py

from jsonrpclib.SimpleJSONRPCServer import SimpleJSONRPCServer

def my_dict(d):
d["gender"] = "男"
return d # 实例化server
server = SimpleJSONRPCServer(("127.0.0.1", 8883))
# 将函数注册到server中
server.register_function(pow)
server.register_function(lambda x, y: x + y, "add")
server.register_function(my_dict)
# 启动server
server.serve_forever()
  1. json_rpc_client.py
import jsonrpclib

server = jsonrpclib.Server("http://127.0.0.1:8883")
print(server.add(11, 22)) # 33
print(server.pow(5, 3)) # 125
ret = server.my_dict(dict(name="马亚南", age=18))
print(ret, type(ret))

总结:

  1. 超时机制 - 重试
  2. 限流使服务处于长期可用的状态 - 高可用
  3. 解耦
  4. 负载均衡 微服务 - 分布式应用的一种具体的提现
  5. json-rpc是否满足上述的要求
  6. 序列化和反序列化数据压缩是否高效
  7. 该rpc框架是否支持多语言

更加高效和更加全面的技术 - zerorpc

基于zeromq的rpc框架: zerorpc

  • zerorpc实现rpc调用

一元调用

  1. 服务端
import zerorpc

class HelloRPC(object):
def hello(self, name):
return f"hello {name}" def add(self, x, y):
return x + y # 1. 实例化一个server
# 2. 绑定我们的业务代码到server中
server = zerorpc.Server(HelloRPC())
# 3. 设置协议、ip、端口
server.bind("tcp://0.0.0.0:8842")
# 3. 启动server
server.run()
  1. 客户端
import zerorpc

# 在功能体验上,client端没有太大的差异
c = zerorpc.Client()
c.connect("tcp://127.0.0.1:8842")
print(c.hello("马亚南"))
print(c.add(11, 22))

流式响应

  1. 服务端
import zerorpc

class StreamingRPC(object):
@zerorpc.stream # @zerorpc.stream这里的装饰器是必须的,否则会有异常,如TypeError:cant't serialize
def streaming_range(self, fr, to, step):
return range(fr, to, step) s = zerorpc.Server(StreamingRPC())
s.bind("tcp://0.0.0.0:4242")
s.run()
  1. 客户端
import zerorpc

c = zerorpc.Client()
c.connect("tcp://127.0.0.1:4242")
for item in c.streaming_range(10, 20, 2):
print(item)

基于zerorpc的调用过程

RPC需要解决的问题

  1. Id映射
  2. 传输协议 tcp/http
  3. 数据的编码和解码xml/json/msgpack
  4. 如何解决高并发问题
  5. 负载均衡问题
  6. 集群问题

选择哪一种rpc解决方案

  1. 生态
  2. 支持的语言(多语言/单语言)

python中的rpc库的更多相关文章

  1. 【归纳】正则表达式及Python中的正则库

    正则表达式 正则表达式30分钟入门教程 runoob正则式教程 正则表达式练习题集(附答案) 元字符\b代表单词的分界处,在英文中指空格,标点符号或换行 例子:\bhi\b可以用来匹配hi这个单词,且 ...

  2. 利用Python中的mock库对Python代码进行模拟测试

    这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下     ...

  3. Python中使用第三方库xlrd来写入Excel文件示例

    Python中使用第三方库xlrd来写入Excel文件示例 这一篇文章就来介绍下,如何来写Excel,写Excel我们需要使用第三方库xlwt,和xlrd一样,xlrd表示read xls,xlwt表 ...

  4. 【转】利用Python中的mock库对Python代码进行模拟测试

    出处 https://www.toptal.com/python/an-introduction-to-mocking-in-python http://www.oschina.net/transla ...

  5. python中的turtle库绘制图形

    1. 前奏: 在用turtle绘制图形时,需要安装对应python的解释器以及IDE,我安装的是pycharm,在安装完pycharm后,在pycharm安装相应库的模块,绘图可以引入turtle模块 ...

  6. python 中有趣的库tqdm

    Tqdm 是 Python 进度条库,可以在 Python 长循环中添加一个进度提示信息用法:tqdm(iterator) # 方法1: import time from tqdm import tq ...

  7. Python中的BeautifulSoup库简要总结

    一.基本元素 BeautifulSoup库是解析.遍历.维护“标签树”的功能库. 引用 from bs4 import BeautifulSoup import bs4 html文档-标签树-Beau ...

  8. Python中关于第三方库的补充

    Python语言的强大之处在于它的开源.正是因为它的开源,产生了成百上千的第三方库,涵盖了计算机的几乎所有的方向.第三方库的安装也并不是特别的复杂,通过在cmd中使用pip命令可以安装几乎所有的库,但 ...

  9. python中的Matplot库和Gdal库绘制富士山三维地形图-参考了虾神的喜马拉雅山

    首先请大家读一下面这篇文章了解什么是Gdal http://blog.csdn.net/grllery/article/details/77822595 剩下的我要公布绘制富士山的代码了,虽然基本co ...

随机推荐

  1. MFC中使用qt演练

    链接 这里 note but , I dont guess that works in qt5

  2. 【LeetCode】666. Path Sum IV 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 日期 题目地址:https://leetcod ...

  3. Python 图片转字符画 学习笔记

    Python 图片转字符画 学习笔记 标签(空格分隔): Python 声明:此文章和所有代码是学习笔记,非原创,原文教程地址:https://www.shiyanlou.com/courses/37 ...

  4. 【转】最短路径——Dijkstra算法和Floyd算法

    [转]最短路径--Dijkstra算法和Floyd算法 标签(空格分隔): 算法 本文是转载,原文在:最短路径-Dijkstra算法和Floyd算法 注意:以下代码 只是描述思路,没有测试过!! Di ...

  5. 【九度OJ】题目1199:找位置 解题报告

    [九度OJ]题目1199:找位置 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1199 题目描述: 对给定的一个字符串,找出有重复的 ...

  6. 【LeetCode】18. 4Sum 四数之和

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:four sum, 4sum, 四数之和,题解,leet ...

  7. 1188 最大公约数之和 V2

    1188 最大公约数之和 V2 题目来源: UVA 基准时间限制:2 秒 空间限制:262144 KB  给出一个数N,输出小于等于N的所有数,两两之间的最大公约数之和.       相当于计算这段程 ...

  8. Contrastive Generative Adversarial Networks

    目录 概 主要内容 代码 Kang M., Park J. Contrastive Generative Adversarial Networks. arXiv preprint arXiv 2006 ...

  9. vue从入门到精通之【vuex】(七)

    vue从入门到精通之[vuex](七) vuex一个公用的大仓库,Vuex 可以帮助我们管理共享状态,并附带了更多的概念和框架. Vuex 实现了一个单向数据流,在全局拥有一个 state 存放数据, ...

  10. C# 设置或验证 PDF中的文本域格式

    概述 PDF中的文本域可以通过设置不同格式,用于显示数字.货币.日期.时间.邮政编码.电话号码和社保号等等.Adobe Acrobat提供了许多固定的JavaScripts用来设置和验证文本域的格式, ...