gRPC在.net中的使用

news/2025/3/3 11:04:06/文章来源:https://www.cnblogs.com/chenxizhaolu/p/18747641

前言

  gRPC 是一种高性能、开源的远程过程调用(RPC)框架,基于 HTTP/2 协议,支持双向流、头部压缩等特性。它默认使用 Protocol Buffers(Protobuf)作为接口定义语言(IDL)和数据序列化格式,适用于微服务、实时通信等场景。

  我们可以结合常用的http服务来了解它。本质上讲,http服务是基于http协议,是一个应用层协议,RPC是基于TPC/IP,是一个传输层协议。应用层协议在传输层之上,所以RPC效率更高,所以RPC更适合内网调用,不必每次通信都要像http一样去3次握手什么的,减少了网络开销。

  

RPC架构

  一个完整的RPC架构里面包含了四个核心的组件,分别是Client ,Server,Client Stub以及Server Stub,这个Stub大家可以理解为存根。分别说说这几个组件:

    • 客户端(Client),服务的调用方。
    • 服务端(Server),真正的服务提供者。
    • 客户端存根,存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。
    • 服务端存根,接收客户端发送过来的消息,将消息解包,并调用本地的方法。

 

 与http对比使用场景

1. 协议与数据格式

特性gRPCHTTP 接口(REST)
协议 基于 HTTP/2 基于 HTTP/1.1 或 HTTP/2
数据格式 使用 Protocol Buffers(Protobuf) 通常使用 JSON 或 XML
传输方式 二进制传输 文本传输

2. 性能

特性gRPCHTTP 接口(REST)
序列化效率 Protobuf 是二进制格式,序列化效率高 JSON/XML 是文本格式,序列化效率较低
传输效率 基于 HTTP/2,支持多路复用和头部压缩 HTTP/1.1 不支持多路复用,效率较低
延迟 低延迟,适合实时通信 延迟较高,适合简单请求-响应场景

3. 通信模式

特性gRPCHTTP 接口(REST)
通信模式 支持四种模式:
1. 一元 RPC
2. 服务器流 RPC
3. 客户端流 RPC
4. 双向流 RPC
仅支持请求-响应模式
实时通信 支持双向流,适合实时通信 不支持双向流,需通过轮询模拟

4. 开发与使用

特性gRPCHTTP 接口(REST)
接口定义 使用 Protobuf 定义服务接口,强类型 使用文档(如 OpenAPI)定义接口
代码生成 自动生成客户端和服务器代码 通常需要手动编写客户端代码
调试工具 工具较少,调试复杂 工具丰富(如 Postman)
跨语言支持 支持多种语言(C++, Java, Go, C# 等) 支持多种语言,但需要手动适配

5. 适用场景

特性gRPCHTTP 接口(REST)
微服务通信 适合高性能、低延迟的微服务通信 适合简单的服务间通信
实时通信 适合实时通信场景(如聊天、推送) 不适合实时通信
跨语言通信 适合异构系统之间的通信 适合简单的前后端通信
浏览器支持 需要 gRPC-Web 适配 原生支持

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/892855.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ABB机器人安全面板维修的关联

在现代工业生产中,ABB机器人扮演着至关重要的角色。然而,就像任何复杂的设备一样,它们也会遭遇故障,这时候工业机器人维修就显得尤为关键。一、ABB机器人故障与安全面板维修的关联ABB机器人故障可能出现在各个部件和功能模块上。其中,安全面板的故障是不容忽视的一部分。当…

Spring AI与DeepSeek实战一:快速打造智能对话应用

本文将手把手教你如何通过 Spring AI 集成 DeepSeek 接口实现普通对话与流式对话功能,助力你的 Java 应用轻松接入 AI 能力!一、概述 在 AI 技术蓬勃发展的今天,国产大模型 DeepSeek 凭借其 低成本、高性能 的特点,成为企业智能化转型的热门选择。而 Spring AI 作为 Java 生…

机器学习特征筛选:向后淘汰法原理与Python实现

向后淘汰法(Backward Elimination)是机器学习领域中一种重要的特征选择技术,其核心思想是通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留对预测结果最具影响力的变量子集。 https://avoid.over…

模板设计模式--java进阶day03

1.模板设计模式说到模板,我们第一时间想到的可能就是写作文不过这样写就是一篇完整的作文,我们应该进行修改这样修改还会存在一个问题,每一个人写的作文不同,中间的body()无法描述清楚,所以我们要将其改为抽象方法这时模板就已经写好了,当我们想写作文时,继承该模板并…

Docker部署数据库--高斯DB(opengauss)

Docker部署高斯DB整体步骤: 1、获取镜像; 2、创建并配置容器; 3、连接使用;01、获取镜像 docker pull enmotech/opengauss:latest02、启动并配置容器 启动容器 docker run --name OpenGauss \ --privileged=true -idt \ --restart=always \ -u root \ -p 15432:5432 \ -e G…

74. 搜索二维矩阵(中)

目录题目题解:数组扁平化+二分查找 题目给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。题解:数组扁平…

储运效率翻倍!物联网技术让油库管理迈向新高度

随着物联网(IoT)、人工智能(AI)和大数据技术的快速发展,传统油库管理模式正在向高度自动化的方向转型。现代油库自动化系统通过传感器、智能设备、数据通信和云端平台的协同工作,实现了从储运管理到安全监控的全流程智能化。以下是油库自动化运行的核心机制和关键环节:数…

R语言中快速生成多个有色差的颜色

001、library(randomcoloR) palette <- randomColor(count = 54) #随机生成60种颜色,其实里面有重复的 palette <- distinctColorPalette(54) #差异明显的60种 palette plot(1:54, pch = 19, cex = 2, col = palette) 。

SAP ABAP里存在类似的集合工具类

实现方式-:传统的实现 "定义一个Table Line类型为通用的对象引用(TYPE REF TO OBJECT)的内表lt_shape,用于存放圆形和长方形的实例对象引用。TYPES:BEGIN OF TY_SHAPE, SHAPE TYPE REF TO OBJECT, END OF TY_SHAPE.TYPES:TT_SHPAE TYPE STANDARD TABLE OF T…

达梦数据库连接配置

官网下载 达梦官网驱动下载:DmJdbcDriver6、DmJdbcDriver7、DmJdbcDriver8、DmJdbcDriver11官网下载地址:https://eco.dameng.com/download/滑倒网页最下方有驱动下载 DBeaver工具连接达梦数据库添加驱动打开 DBeaver,选择“数据库”->“驱动管理器”->“新建”“创建…

适配器设计模式--java进阶day03

1.设计模式 通俗来讲,设计模式就是其他程序员遇到某些问题时的解决经验,我们学习设计模式,在遇到了同样的问题后便可解决2.适配器设计模式有人可能会感到疑惑,接口和实现类会有什么问题,我们举两个例子 刚学的键盘监听,我们要使用里面的一个方法,但另外两个方法对我们来…

以防你不知道书签还能玩出什么花来

说到书签,你可能会认为它不就是用来保存网址的嘛,还能有什么花头?其实不然,它能做的事有很多,包括运行 JS 代码、将网页变成记事本、前端编辑器、计算器......说到书签,你可能会认为它不就是用来保存网址的嘛,还能有什么花头? 其实不然,它能做的事有很多,包括运行 JS…