
RPC
文章平均质量分 68
RPC 远程过程调用
wohu007
这个作者很懒,什么都没留下…
展开
-
gRPC 笔记(06)— gRPC 的 HTTP2 实现流程、简单RPC模式、服务器端RPC模式、客户端RPC模式、双向RPC模式的消息流传递
gRPC 使用 HTTP/2 作为其传输协议,实现通过网络发送消息。这也是 gRPC 能够成为高性能 RPC 框架的原因之一。在 HTTP/2 中,客户端和服务器端的所有通信都是通过一个 TCP 连接完成的,这个连接可以传送任意数量的双向字节流。相关术语如下:流(stream):在一个已建立的连接上的双向字节流。一个流可以携带一条或多条消息。帧(frame):HTTP/2 中最小的通信单元。每一帧都包含一个帧头,它至少要标记该帧所属的流。消息(message):完整的帧序列,映射为一条逻辑上的原创 2022-05-15 22:30:00 · 2641 阅读 · 0 评论 -
gRPC 笔记(05)— gRPC 通信模式之服务器端流 RPC、客户端流 RPC 、双向流 RPC的代码实现
1. 服务器端流 RPC在简单 RPC 模式中, gRPC 服务器端和 gRPC 客户端在通信时始终只有一个请求和一个响应。在服务器端流 RPC 模式中,服务器端在接收到客户端的请求消息后,会发回一个响应的序列。这种多个响应所组成的序列也被称为“流”。在将所有的服务器端响应发送完毕之后,服务器端会以 trailer 元数据的形式将其状态发送给客户端,从而标记流的结束。假设需要实现一个订单搜索功能,利用该功能,只要提供一个搜索词就能得到匹配的结果,如图所示。订单管理服务不会将所有匹配的订单一次性地发送给原创 2022-05-14 22:45:00 · 1930 阅读 · 0 评论 -
gRPC 笔记(04)— gRPC 通信模式之简单RPC模式(一元RPC模式)
1. 简单 RPC 模式一元 RPC 模式也被称为简单 RPC 模式。在该模式中,当客户端调用服务器端的远程方法时,客户端发送请求至服务器端并获得一个响应,与响应一起发送的还有状态细节以及元数据。如图所示,客户端发送一个带有订单 ID 的请求,服务器端给出响应,响应中包含订单的信息。因此,它遵循一元 RPC 模式。...原创 2022-05-13 22:04:57 · 513 阅读 · 0 评论 -
gRPC 笔记(03)— protobuf 文件编写、编译器安装、生成客户端和服务端示例
2. Protobuf 文件编写2.1 安装 protoc 编译器将 Proto 协议文件转换为多种语言对应格式的工具,根据对应平台选择对应的安装包,安装包下载地址https://github.com/protocolbuffers/protobuf/releasescd ~/tmp# 下载wget https://github.com/protocolbuffers/protobuf/releases/download/v3.11.4/protoc-3.11.4-linux-x86_64.zip原创 2022-04-28 23:30:00 · 3819 阅读 · 1 评论 -
gRPC 笔记(02)— Google Protocol Buffer 协议语法规则
1. 简介Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据序列化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。它有以下特点:在谷歌内部长期使用,产品成熟度高;跨语言、支持多种语言,包括 C++、Java 和 Python 等;编码后的消息更小,更加有利于存储和传输;编解码的性能非常高;支持不同协议版本的前向兼容;Google 开源的二进制 RPC 通讯协议;Pro原创 2022-04-27 22:45:00 · 1250 阅读 · 0 评论 -
gRPC 笔记(01)— gRPC 概念、特点、流程
1. gRPC 概念gRPC 是 Google 开源的一款高性能的 RPC 框架。GitHub 上介绍如下:gRPC is a modern, open source, high-performance remote procedure call (RPC) framework that can run anywhere.市面上的 RPC 框架数不胜数,包括 Alibaba Dubbo 和微博的 Motan 等。gRPC 能够在众多的框架中脱颖而出,是跟其高性能是密切相关的。1.1 接口设计原创 2021-09-02 20:19:11 · 1562 阅读 · 0 评论 -
RPC 笔记(08)— socket 通信(多进程多线程服务器)
在上一节中如果并行的客户端连接数超过了默认开启进程的数量,那么后来的客户端请求将会阻塞,为了不阻塞新的客户端,我们可以将进程的单线程改成多线程即可。服务端代码:import jsonimport structimport socketimport threadingimport multiprocessingdef handle_conn(conn, ip, handlers): print("{} connect ...".format(ip)) # 循环读写原创 2021-11-26 20:06:28 · 413 阅读 · 0 评论 -
RPC 笔记(07)— socket 通信(多进程服务器)
上节我们完成了一个简单的多线程服务器,可以并发处理多个客户端连接。但是 Python 由于全局解释器锁 GIL 的存在,致使多个线程只能占满一个 CPU 核心,多线程并不能充分利用多核的优势。所以多数 Python 服务器推荐使用多进程模型。服务端代码import jsonimport structimport socketimport multiprocessingdef handle_conn(conn, ip, handlers): print("{} connect ..原创 2021-11-25 20:07:52 · 304 阅读 · 0 评论 -
RPC 笔记(06)— socket 通信(多线程服务器)
1. 客户端代码import jsonimport timeimport structimport socketdef send_request(sock_obj, method, parameter): request = json.dumps({"client": method, "params": parameter}) # 请求消息体 length_prefix = struct.pack("I", len(request))原创 2021-11-24 20:04:57 · 240 阅读 · 0 评论 -
RPC 笔记(05)— socket 通信(单线程服务器)
1. Python 标准库1.1 socket提供 RPC 服务的网络通信功能,方便用户编写 tcp/udp 相关的代码。两个不同机器的进程需要通信时,可以通过 socket 来传输数据。客户端 API,参数略。s = socket.socket() # 创建一个套接字s.connect() # 连接远程服务器s.recv() # 读s.send() # 尽可能地写s.sendall() # 完全写s.close() # 关闭send 和 sendall方法的区别,在网原创 2021-11-22 20:13:47 · 565 阅读 · 1 评论 -
RPC 笔记(04)— RPC 消息协议(消息边界、消息结构、消息压缩)
1. 消息边界RPC 需要在一条 TCP 链接上进行多次消息传递。在连续的两条消息之间必须有明确的分割规则,以便接收端可以将消息分割开来。基于 TCP 链接之上的单条消息如果过大,就会被网络协议栈拆分为多个数据包进行传送。如果消息过小,网络协议栈可能会将多个消息组合成一个数据包进行发送。对于接收端来说它看到的只是一串串的字节数组,如果没有明确的消息边界规则,接收端是无从知道这一串字节数组究竟是包含多条消息还是只是某条消息的一部分。比较常用的两种分割方式是特殊分割符法和长度前缀法。特殊分原创 2021-11-21 10:59:52 · 1121 阅读 · 0 评论 -
RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别
1. 基本概念PRC 远程过程调用,其就是一个节点请求另外一个节点提供的服务。本地过程调用:如果要将本地的对象进行相关操作,可以定义一个方法,然后将相关对象传入,然后对其对象进行更新,然后由函数返回更新后的函数对象。远程过程调用:在上述过程中,如果其定义的函数是在另外一个服务器端,并且执行的函数体也是在另外一台远程服务器上,那么这个过程就称之为远程过程调用。2. 调用过程其调用过程如下所示:首先客户端需要告诉服务器端,需要调用的函数,然后这里的函数和进程 ID 存在一个映射,原创 2021-08-30 20:31:39 · 3900 阅读 · 1 评论