当前位置: 首页 > 知识库问答 >
问题:

ProtoBuf网在gRPC中的应用

郁承运
2023-03-14

我试图在工作中建立一个利用gRPC的PoC。这里的谷歌文档将带我们浏览一个示例应用程序。我想知道protobuf net,尤其是protogen,是否有能力理解执行gRPC调用所需的服务定义和类?还是这件事正在进行中?如果我使用谷歌的protoc生成客户机和服务器代码(包括服务定义和RPC调用),使用protobuf net生成我的业务对象,这会有效吗。

共有2个答案

常海
2023-03-14

这是我很想去做的事情,但到目前为止,还没有:我还没有必要去调查这件事,而且它还没有达到我积压工作的顶部。我试着关注人们想要什么功能,所以很高兴知道你在追求它,但今天:不。这主要是时间问题——protobuf net在我的空闲/业余时间得到了发展,除非我有真正的理由花“工作时间”在它上。

最新消息:我正在积极地与微软的同事们交谈,他们正在为gRPC工作。NET,看来我们很可能会在这里一起努力,使gRPC在未来成为可能。NET Core 3.0 timescale——意思是:我们将共享服务调用代码的一个实现,但允许它与多个序列化器API一起工作。

勾岳
2023-03-14

protobuf网。Grpc现在是一种东西。。。尽管是在预演中。什么时候NET Core 3发布后,我们应该能够提供此功能。

它受到WCF方法的启发,因此您的服务接口是通过以下方式定义的:

namespace Whatever {
    [ServiceContract]
    public interface IMyAmazingService {
        ValueTask<SearchResponse> SearchAsync(SearchRequest request);
        // ... etc
    }
}

服务器只需实现以下接口:

public class MyServer : IMyAmazingService {
    // ...
}

(托管它们的方式取决于您使用的是ASP.NET Core还是本机/非托管gRPC库;两者都有效)

客户端只需要请求接口:

var client = http.CreateGrpcService<IMyAmazingService>();
var result = await client.SearchAsync(query);

在上述情况下,这将被推断为无论什么。MyAmazingService/搜索gRPC术语中的服务,即。

package Whatever;
// ...
service MyAmazingService {
    rpc Search (SearchRequest) returns (SearchResponse) {}
}

但是,如果愿意,可以更明确地配置服务/方法名称。以上是一个简单的例子;对于一元运算,结果可以是T任务中的任意一个

如果使用IAsyncEnumerable,将自动推断流/双工操作

 类似资料:
  • 我正在尝试实施gRPC,现在我遇到了各种各样的问题,但我就是不明白我做错了什么。我遵循这个文档:https://github.com/grpc/grpc-java/blob/master/README.md 现在,当我试图构建我的项目时,我总是会遇到这样的错误 在我的Android Studio外部库中,我有Pro buf-java-3.12.1 jar。 在我的project gradle文件中

  • 我试图理解protobuf和gRPC,以及如何使用这两种方法。你能帮我理解以下几点吗: 考虑到OSI模型,在哪里,例如Protobuf在第4层? 通过消息传输来思考“流”是怎样的,gRPC在做什么而protobuf错过了什么? 如果发送方使用protobuf,服务器是否可以使用gRPC,或者gRPC是否添加了只有gRPC客户端才能提供的内容? 如果gRPC可以使同步和异步通信成为可能,那么Prot

  • ProtoBuf 与 gRPC ProtoBuf 是一套接口描述语言(IDL)和相关工具集(主要是 protoc,基于 C++ 实现),类似 Apache 的 Thrift)。用户写好 .proto 描述文件,之后使用 protoc 可以很容易编译成众多计算机语言(C++、Java、Python、C#、Golang 等)的接口代码。这些代码可以支持 gRPC,也可以不支持。 gRPC 是 Goog

  • 目前开源社区已经围绕Protobuf和gRPC开发出众多扩展,形成了庞大的生态。本节我们将简单介绍验证器和REST接口扩展。 4.6.1 验证器 到目前为止,我们接触的全部是第三版的Protobuf语法。第二版的Protobuf有个默认值特性,可以为字符串或数值类型的成员定义默认值。 我们采用第二版的Protobuf语法创建文件: syntax = "proto2"; package main;

  • 我见过几个这样的例子: 使用流的目的是什么,它是否能提高传输效率? 理论上-是的-我显然不想流式传输我的文件传输,但这就是在连接上发生的。。。那么,这个关键字的实际好处是什么呢?它是否强制执行某种形式的特殊缓冲以减少一些开销?无论哪种方式,数据都在完整传输!

  • 在我从原来的问题发展到现在时更新问题。 第1步。我已经使用此链接编译并安装了Protobuf编译器for mac。 步骤2.目前卡在gRPCJavaCodecen Plugin for Pro buf Compiler链接: 成功<代码>/gradlew java\u插件不可执行 错误<代码>/gradlew测试(屏幕截图1) ***构建codegen需要Protobuf版本3.9.0 <代码>哪