如何用最简代码构建迷你版gRPC框架?

摘要:在《用最少的代码模拟gRPC四种消息交换模式》中,我使用很简单的代码模拟了gRPC四种消息交换模式(Unary、Client Streaming、Server Streaming和Duplex Streaming),现在我们更近一步,试着使
在《用最少的代码模拟gRPC四种消息交换模式》中,我使用很简单的代码模拟了gRPC四种消息交换模式(Unary、Client Streaming、Server Streaming和Duplex Streaming),现在我们更近一步,试着使用极简的方式打造一个gRPC框架(github地址)。这个gRPC是对ASP.NET Core gRPC实现原理的模拟,并不是想重新造一个轮子。 一、“标准”的gRPC定义、承载和调用 二、将gRPC方法抽象成委托 三、将委托转换成RequestDelegate UnaryCallHandler ClientStreamingCallHandler ServerStreamingCallHandler DuplexStreamingCallHandler 四、路由注册 五、为gRPC服务定义一个接口 六、重新定义和承载服务 一、“标准”的gRPC定义、承载和调用可能有些读者朋友们对ASP.NET Core gRPC还不是太熟悉,所以我们先来演示一下如何在一个ASP.NET Core应用中如何定义和承载一个简单的gRPC服务,并使用自动生成的客户端代码进行调用。我们新建一个空的解决方案,并在其中添加如下所示的三个项目。 我们在类库项目Proto中定义了如下所示Greeter服务,并利用其中定义的四个操作分别模拟四种消息交换模式。HelloRequest 和HelloReply 是它们涉及的两个ProtoBuf消息。 syntax = "proto3"; import "google/protobuf/empty.proto"; service Greeter { rpc SayHelloUnary (HelloRequest) returns ( HelloReply); rpc SayHelloServerStreaming (google.protobuf.Empty) returns (stream HelloReply); rpc SayHelloClientStreaming (stream HelloRequest) returns (HelloReply); rpc SayHelloDuplexStreaming (stream HelloRequest) returns (stream HelloReply); } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }ASP.NET Core项目中定义了如下的GreeterServce服务实现了定义的四个操作,基类GreeterBase是针对上面这个.proto文件生成的类型。
阅读全文