What is Grpc?
官网首页给出的解释:A high-performance, open source universal RPC framework(高性能,开源通用RPC框架)
支持 Go C++ Java Python C#等语言
今天的学习主要针对asp.netcore3.1,那么我们选择c#
gRPC简介
gRPC和协议缓冲区简介。
该页面向您介绍gRPC和协议缓冲区。gRPC可以将协议缓冲区用作其接口定义语言(IDL)和其基础消息交换格式。如果您不熟悉gRPC和/或协议缓冲区,请阅读本章!如果您只是想深入了解gRPC的实际效果,请 选择一种语言,然后尝试使用其快速入门。
总览
在gRPC中,客户端应用程序可以直接在其他计算机上的服务器应用程序上调用方法,就好像它是本地对象一样,这使您更轻松地创建分布式应用程序和服务。与许多RPC系统一样,gRPC围绕定义服务的思想,指定可通过其参数和返回类型远程调用的方法。在服务器端,服务器实现此接口并运行gRPC服务器以处理客户端调用。在客户端,客户端具有一个存根(在某些语言中仅称为客户端),提供与服务器相同的方法。
从Google内部的服务器到您自己的台式机,gRPC客户端和服务器可以在各种环境中运行并相互通信,并且可以使用gRPC支持的任何语言编写。因此,例如,您可以使用Go,Python或Ruby的客户端轻松地用Java创建gRPC服务器。此外,最新的Google API的接口将具有gRPC版本,可让您轻松地在应用程序中内置Google功能。
使用协议缓冲区
默认情况下,gRPC使用协议缓冲区,这是Google成熟的用于序列化结构化数据的开源机制(尽管它可以与其他数据格式(例如JSON)一起使用)。这里是它的工作原理的快速介绍。如果您已经熟悉协议缓冲区,请随时跳到下一部分。
使用协议缓冲区的第一步是为要在原始文件中序列化的数据定义结构:这是带有.proto扩展名的普通文本文件。协议缓冲区数据被构造为 消息,其中每个消息都是信息的小逻辑记录,其中包含一系列称为字段的名称/值对。这是一个简单的例子:
message Person {
string name = 1;
int32 id = 2;
bool has_ponycopter = 3;
}
然后,一旦指定了数据结构,就可以使用协议缓冲区编译器protoc从原型定义中以首选语言生成数据访问类。这些为每个字段(例如name()和)提供了简单的访问器set_name(),以及将整个结构序列化为原始字节或从原始字节中解析出整个结构的方法。因此,例如,如果您选择的语言是C ++,则在上面的示例中运行编译器将生成一个名为的类Person。然后,您可以在应用程序中使用此类来填充,序列化和检索Person协议缓冲区消息。
您可以在普通的原始文件中定义gRPC服务,并使用RPC方法参数和返回类型指定为协议缓冲区消息:
// The greeter service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
gRPCprotoc与特殊的gRPC插件一起使用,可从您的原型文件生成代码:您将生成生成的gRPC客户端和服务器代码,以及用于填充,序列化和检索消息类型的常规协议缓冲区代码。您将在下面看到一个示例。
要了解有关协议缓冲区的更多信息,包括如何protoc使用所选语言与gRPC插件一起安装,请参阅协议缓冲区文档。。
协议缓冲区版本
而协议缓冲区开源用户已经使用了一段时间,该站点上的大多数示例都使用协议缓冲区版本3(proto3),该协议的语法略有简化,提供了一些有用的新功能,并且支持更多语言。Proto3当前可用于Java,C ++,Dart,Python,Objective-C,C#,精简版运行时(Android Java),Ruby和JavaScript,可从 协议缓冲区GitHub存储库中获取,以及golang / protobuf GitHub存储库中的Go语言生成器 ,正在开发更多语言。您可以在proto3语言指南中找到更多信息和参考文件适用于每种语言。参考文档还包含正式规范用于.proto文件格式。
通常,虽然您可以使用proto2(当前的默认协议缓冲区版本),但我们建议您将proto3与gRPC一起使用,因为它可以使用gRPC支持的所有语言,并且可以避免与proto2客户端通信时的兼容性问题proto3服务器,反之亦然。
总结
gRPC源自google,是一种新式的高性能远程过程调用(remote process call)框架,在应用程序级别,它简化了客户端和后端服务之间的消息传送。
优点:
1.高性能,基于协议的API开发
2.支持客户端、服务器、全双工通信,流式处理
3.提供了最常见开发堆栈(包括 Java、JavaScript、c#、switch、Swift和NodeJS)的全面支持
4.gRPC是轻型且高性能的。与JSON序列化相比,与JSON 序列化相比,速度有提升。
缺点
需要HTTP2协议,可能现有许多应用程序仍然没有采用这个协议
————————————————
版权声明:本文为CSDN博主「老邬的日常」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44429140/article/details/109109902