网站建设安全规范,网络平台推广有哪些渠道,泰安房产最新网签情况,软件开发 网站开发公司什么是 gRPC 像 gRPC 是由 google 开发的一个高性能、通用的开源 RPC 框架#xff0c;主要面向移动应用开发且基于 HTTP/2 协议标准而设计#xff0c;同时支持大多数流行的编程语言。
gRPC 基于 HTTP/2 协议传输#xff0c;而 HTTP/2 相比 HTTP1.x #xff0c;有以下优势:… 什么是 gRPC 像 gRPC 是由 google 开发的一个高性能、通用的开源 RPC 框架主要面向移动应用开发且基于 HTTP/2 协议标准而设计同时支持大多数流行的编程语言。
gRPC 基于 HTTP/2 协议传输而 HTTP/2 相比 HTTP1.x 有以下优势:
采用二进制格式传输协议支持多路复用;支持通过同一个连接发送多个并发的请求支持流式传输;服务器可以对客户端的一个请求发送多个响应;对消息头进行了压缩传输能够节省消息头占用的网络流量。gRPC 使用 Protocol Buffers 作为序列化协议。
但同时gRPC 也有自身的局限性
1. 浏览器支持有限
当下不可能直接从浏览器调用 gRPC 服务。gRPC 大量使用 HTTP/2 功能没有浏览器提供支持 gRPC 客户机的 Web 请求所需的控制级别。例如浏览器不允许调用者要求使用的 HTTP/2 或者提供对底层 HTTP/2 框架的访问。
2. 不是人类可读的
HTTP API 请求以文本形式发送可以由人读取和创建。默认情况下 gRPC 消息使用 protobuf 编码。虽然 protobuf 的发送和接收效率很高但它的二进制格式是不可读的。protobuf 需要在 *.proto 文件中指定的消息接口描述才能正确反序列化。需要额外的工具来分析线路上的 Protobuf 有效负载并手工编写请求。
若需要将内部 gRPC 作为接口开放给外部用户或浏览器调用则需要有第三方代理解决 HTTP 协议转换成 gRPC 协议的问题。
为此我们在 Apinto 多协议支持的基础上发布了 HTTP 转 gRPC 插件eolinker.com:apinto:http_to_grpc 在 Apinto 上 HTTP 转 gRPC 插件
Apinto 通过插件的方式支持 HTTP 协议转换成 gRPC 协议请求在http_to_grpc 插件中完成了 HTTP 客户端 与 gRPCServer 通讯时的协议转换及数据编解码工作其通讯的过程如下
接下来通过一个完整的示例向大家演示怎样构建一个 HTTP请求并通过 Apinto 进行 HTTP协议 转换成 gRPC协议请求。在以下的示例中我们会将 Go 作为 gRPCServer 服务端处理程序使用 Eolink 作为 HTTP 客户端发起 HTTP 请求。
以下示例可以在 Apinto 仓库中获取。 配置 Protocol Buffer
1. 创建示例文件 msg.proto 该文件定义了示例消息类型我们在这里定义了一个 HelloRequest 和 HelloResponse 的 message。
2. 创建示例文件 service.proto 该文件定义了服务 Hello引入了第一步创建的文件 msg.proto定义了四个方法包含了一元 RPC、客户端流、服务端流、双向流四种 gRPC 通信模式。 配置服务端程序
1. 创建自动生成 gRPC 文件脚本grpc.sh 该脚本将生成 gRPC 客户端/服务端调用相关代码并将其存储到 demo_service目录下。
执行 grpc.sh生成服务端 Go 原始消息和服务/客户端存根。 2. 实现服务端处理程序接口 上述代码重新定义了 Hello 方法
将 HelloRequest 中的 name 字段通过 HelloResponse 的 msg 字段封装成hello,%s 的结果返回
将请求的 Header 作为 gRPC 响应的 Trailer 头部返回
3. 定义 gRPC 服务端入口文件 在此处gRPC 服务端开启了 gRPC 反射配置 Apinto 网关时可选择绑定具体的 Protobuf 资源也可以直接启用反射动态获取 gRPC 服务端的 Protobuf 信息。
4. 编译 gRPC 服务器程序 上文介绍了如何构造 gRPC 示例服务器下文将使用该示例服务器结合 Apinto-Dashboard 来演示如何将 HTTP 协议转成 gRPC 。
更多使用方式可到我们的 Github 进一步了解https://github.com/eolinker/apinto