| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> RPC在Python中的使用及原理浅析 -> 正文阅读 |
|
[Python知识库]RPC在Python中的使用及原理浅析 |
RPC是远程过程调用(Remote Procedure Call)的缩写形式。RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用过程接收答复信息,获得进程结果,然后调用执行继续进行。 gRPC 是Google开源的一款高性能 RPC 框架,基于 ProtoBuf 序列化协议进行开发,支持多种语言。下面介绍Python语言的gRPC通信示例。 1 python3使用gRPC示例使用案例:小写字符串转换为大写字符串。目录结构如下: 1.1 安装 Python 依赖包
1.2 新建 data.proto文件data.proto 为protobuf格式文件,定义了数据类以及远程调用方法。
1.3 生成proto数据的python调用格式、gRPC方法接口在Linux平台中运行:
在 base_package 文件夹下生成 data_pb2.py 和 data_pb2_grpc.py,其中 data_pb2.py 为数据格式文件,data_pb2_grpc.py 为gRPC方法文件。 1.4 gRPC服务端服务端具体实现了proto文件中定义的方法 DoFormat,将实现后的服务类添加到gRPC服务端中,当服务端接收到客户端要调用的函数名时通过反射机制执行具体的方法并返回执行结果。
1.5 gRPC客户端客户端连接gRPC服务端后,即可进行远程过程调用。
输出结果:
2 RPC基本原理浅析2.1 RPC架构一个完整的RPC架构里面包含了四个核心的组件,分别是Client,Client Stub,Server以及Server Stub,这个Stub可以理解为存根。
2.2 RPC流程(1) 客户端(client)以本地调用方式(即以接口的方式)调用服务; (2) 客户端存根(client stub)接收到调用后,负责将方法、参数等组装成能够进行网络传输的消息体(将消息体对象序列化为二进制); (3) 客户端通过sockets将消息发送到服务端; (4) 服务端存根( server stub)收到消息后进行解码(将消息对象反序列化); (5) 服务端存根( server stub)根据解码结果调用本地的服务; (6) 本地服务执行并将结果返回给服务端存根( server stub); (7) 服务端存根( server stub)将返回结果打包成消息(将结果消息对象序列化); (8) 服务端(server)通过sockets将消息发送到客户端; (9) 客户端存根(client stub)接收到结果消息,并进行解码(将结果消息反序列化); (10) 客户端(client)得到最终结果。 RPC的目标是要把2、3、4、7、8、9这些步骤都封装起来。 2.3 RPC作用及优势作用
优势 3 RPC 和 HTTP 的区别及适用场景3.1 RPC 和 HTTP 区别1、传输协议: 2、传输效率: 3、性能消耗: 4、负载均衡: 5、服务治理:(下游服务新增,重启,下线时如何不影响上游调用者) 6、连接: rpc使用长连接:直接基于socket进行连接,不用每个请求都重新走三次握手的流程。 3.2 使用场景RPC服务一般用于集群内部微服务之间的通信,如果需要对外暴露服务一般会提供等价的HTTP REST接口。 参考Python语言实现gRPC通信 (在Linux环境下生成proto文件!在windows下面执行错误了) |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 7:01:59- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |