惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
爱范儿
爱范儿
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
P
Palo Alto Networks Blog
博客园 - 司徒正美
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
罗磊的独立博客
阮一峰的网络日志
阮一峰的网络日志
The Register - Security
The Register - Security
D
DataBreaches.Net
A
Arctic Wolf
C
Cyber Attacks, Cyber Crime and Cyber Security
P
Privacy & Cybersecurity Law Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
B
Blog
V
Vulnerabilities – Threatpost
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
T
Tor Project blog
GbyAI
GbyAI
Recent Announcements
Recent Announcements
T
The Blog of Author Tim Ferriss
Simon Willison's Weblog
Simon Willison's Weblog
Cyberwarzone
Cyberwarzone
C
Cisco Blogs
G
GRAHAM CLULEY
宝玉的分享
宝玉的分享
T
Threat Research - Cisco Blogs
C
Check Point Blog
W
WeLiveSecurity
F
Fortinet All Blogs
P
Proofpoint News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
月光博客
月光博客
Project Zero
Project Zero
Know Your Adversary
Know Your Adversary
V
Visual Studio Blog
H
Help Net Security
H
Hacker News: Front Page
Webroot Blog
Webroot Blog
S
Securelist
酷 壳 – CoolShell
酷 壳 – CoolShell
O
OpenAI News
The Cloudflare Blog
Attack and Defense Labs
Attack and Defense Labs

博客园 - DotNet菜园

gRPC入门学习之旅(十) gRPC入门学习之旅(九) gRPC入门学习之旅目录 gRPC入门学习之旅(八) gRPC入门学习之旅(七) gRPC入门学习之旅(六) gRPC入门学习之旅(五) gRPC入门学习之旅(四) gRPC入门学习之旅(三) gRPC入门学习之旅(一) WPF入门教程系列三十 ——DataGrid验证 WPF入门教程系列二十九 ——DataGrid使用示例MVVM模式(7) WPF入门教程系列二十八 ——DataGrid使用示例MVVM模式(6) WPF入门教程系列二十八 ——DataGrid使用示例MVVM模式(5) WPF入门教程系列二十七 ——DataGrid使用示例MVVM模式(4) WPF入门教程系列二十六——DataGrid使用示例(3) WPF入门教程系列二十五——DataGrid使用示例(2) WPF入门教程系列目录 WPF入门教程系列二十四——DataGrid使用示例(1)
gRPC入门学习之旅(二)
DotNet菜园 · 2024-03-16 · via 博客园 - DotNet菜园

    gRPC入门学习之旅(一)

     gRPC是一个高性能、通用的开源远程过程调用(RPC)框架,基于底层HTTP/2协议标准协议层Protobuf序列化协议开发,支持众多的开发语言,由Google开源。

     gRPC也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。

     gRPC 客户端和服务端可以在多种环境中运行和交互。你可以用Java创建一个 gRPC 服务端,用 Go、Python、C# 来创建客户端。

特点:

  • 跨语言;
  • 基于HTTP/2之上的二进制协议;
  • Protobuf序列化机制,比JSON体积小,网络传输快;
  • 一个连接上可以多路复用,并发处理多个请求和响应;
  • 多种语言的类库实现;
  • 服务定义文件和自动代码生成(.proto 文件和 Protobuf 编译工具);
  • 适合高性能轻量的微服务,一般对外的接口用Restful API,内部服务的调用用gRPC。gRPC是一个分布式服务框架,和以前的WebService,WCF类似;
  • gRPC还提供了很多扩展点,用于对框架进行功能定制和扩展,例如,通过开放负载均衡接口可以无缝的与第三方组件进行集成对接(Zookeeper、域名解析服务、SLB 服务等)。

    gRPC 使用 HTTP/2 作为传输协议。 虽然与 HTTP 1.1 也能兼容,但 HTTP/2 具有许多高级功能:

    用于数据传输的二进制组帧协议 - 与 HTTP 1.1 不同,HTTP 1.1 是基于文本的。

    对通过同一连接发送多个并行请求的多路复用支持 - HTTP 1.1 将处理限制为一次处理一个请求/响应消息。

    双向全双工通信,用于同时发送客户端请求和服务器响应。

    内置流式处理,支持对大型数据集进行异步流式处理的请求和响应。

    减少网络使用率的标头压缩。

     gRPC 是轻量型且高性能的。 其处理速度可以比 JSON 序列化快 8 倍,消息小 60% 到 80%。 在 Microsoft Windows Communication Foundation (WCF) 中,gRPC 的性能超过经过高度优化的 NetTCP 绑定的速度和效率。 与偏向于 Microsoft 堆栈的 NetTCP 不同,gRPC 是跨平台的。

接下来,我们通过一个Demo,来学习一下,如何在Visual Studio 2022中实现gRPC功能。

2、创建gRPC服务端

2.1、创建gRPC服务端项目

1. 打开Visual Studio 2022,在开始界面中选择“创建新项目”。如下图。

 

2.或者在菜单上点击文件—>新建—>项目—>弹出“创建新项目”的界面。如下图。

3. Visual Studio 2022弹出的“创建新项目”的对话框中做如下选择。如下图。

  • 在最左边的下拉框中,选择 “C# ,如下图中1处
  • 在中间的下拉框中,选择 “所有平台”,如下图2处。
  • 在最右边的下拉框中,选择“Web”,如下图3处。
  • 在下图中4处,选择“ASP.NET Core gRPC服务”gRPC项目模板,点击“下一步”按钮。

     

4.在弹出的“配置新项目”的对话框中,如下图,在“项目名称”输入框中,输入“Demo.GrpcService”。然后使用鼠标点击“下一步”按钮。

5. 在弹出的“其他信息”的对话框,如下图。在“框架”下拉框中,选择“NET 7.0(标准期限支持)”。其他值选择默认值即可。然后使用鼠标点击“创建”按钮。

6.默认项目文件结构,如下图所示:

2.2、项目文件说明

  • appsettings.json
    我们打开appsettings.json文件,其中有一个Protocols属性,代表基于Http2进行通信。

 

  • Protos
    在创建的项目中,我们会看到有一个名称为Protos的文件夹,该文件夹用于存放proto协议文件,其中的greet.proto是项目默认给我们创建的一个示例文件,它会根据协议自动生成需要的类文件。该协议文件中的具体说明如下图所示:

 

  • Services
    在创建的项目中,我们会看到有一个名称Services的文件夹,该文件夹用于存放具体的业务实现类(即:服务类),其中的GreeterService.cs是项目默认给我们创建的一个示例文件,具体说明如下图所示:

       上述图中的Greeter.GreeterBase来自greet.proto文件生成的类文件,具体位置如下图所示:

 

  • 注册服务

     在Visual Studio 2022的“解决方案资源管理器”中找到Program.cs文件,使用鼠标双击打开Program.cs文件,在这个文件中需要添加gRPC服务,同时需要将所有的业务服务进行注册,如下图所示: