• gRPC C#学习


    前些天gRPC 发布1.0 版本,代表着gRPC 已经正式进入稳定阶段。 

    今天我们就来学习gRPC C# 。而且目前也已经支持.NET Core 可以实现完美跨平台。

    传统的.NET 可以通过Mono 来实现跨平台调用。

    GitHub: https://github.com/grpc/grpc

    gRPC 简单介绍:

    gRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。客户端充分利用高级流和链接功能,从而有助于节省带宽、降低的TCP链接次数、节省CPU使用、和电池寿命。

    gRPC支持多种语言,并能够基于语言自动生成客户端和服务端功能库。目前,在GitHub上已提供了C版本grpc、Java版本grpc-java 和 Go版本grpc-go,其它语言的版本正在积极开发中,其中 grpc支持C、C++、Node.js、Python、Ruby、Objective-C、PHP和C#等语言,grpc-java已经支持Android开发。

    gRPC已经应用在Google的云服务和对外提供的API中,其主要应用场景如下:

    低延迟、高扩展性、分布式的系统
    同云服务器进行通信的移动应用客户端
    设计语言独立、高效、精确的新协议
    便于各方面扩展的分层设计,如认证、负载均衡、日志记录、监控等

    参考文档:

    http://www.infoq.com/cn/news/2015/03/grpc-google-http2-protobuf

    本篇文章主要讲解传统.NET 应用如何支持gRPC。

    下面就正式开始。

    新建项目

    首先我们创建一个gRPCDemo 的类库。

    然后添加两个控制台应用程序 gRPCServer gRPCClient。

    最终项目结构如下:

    定义服务

    建好项目以后我们来定义服务

    这里我们在gRPCDemo 项目里添加一个 helloworld.proto 内容如下:

    下面主要定义一个gRPC 的服务里面有个 SayHello rpc 方法

    syntax = "proto3";
    package gRPCDemo;
    service gRPC {
      rpc SayHello (HelloRequest) returns (HelloReply) {}
    }
    
    message HelloRequest {
      string name = 1;
    }
    
    message HelloReply {
      string message = 1;
    }

    使用Grpc.Tools生成代码

    定义好服务以后我们就可以来生成代码了。

    首先需要添加引用:

    在每个项目中添加上Grpc 及 Google.Protobuf 

    Install-Package Grpc
    Install-Package Google.Protobuf

    然后在gRPCDemo 项目中再添加上工具 Grpc.Tools

    NuGet 命令行:

    Install-Package Grpc.Tools

    然后在命令行执行以下命令,注意执行命令的目录为packages 的上层目录

    packagesGrpc.Tools.1.0.0	oolswindows_x86protoc.exe -IgRPCDemo --csharp_out gRPCDemo  gRPCDemohelloworld.proto --grpc_out gRPCDemo --plugin=protoc-gen-grpc=packagesGrpc.Tools.1.0.0	oolswindows_x86grpc_csharp_plugin.exe

    执行完以后,在gRPCDemo 目录下会多出Helloworld.cs 及 HelloworldGrpc.cs 类,将其包含至gRPCDemo 项目既可。

    然后gRPCServer gRPCClient 分别都引用 gRPCDemo。

    创建服务端及客户端

    下面我们来编写服务端及客户端

    首先是服务端:

     Program.cs 

        class gRPCImpl : gRPC.gRPCBase
        {
            // 实现SayHello方法
            public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
            {
                return Task.FromResult(new HelloReply { Message = "Hello " + request.Name });
            }
        }
    
        class Program
        {
            const int Port = 9007;
    
            public static void Main(string[] args)
            {
                Server server = new Server
                {
                    Services = { gRPC.BindService(new gRPCImpl()) },
                    Ports = { new ServerPort("localhost", Port, ServerCredentials.Insecure) }
                };
                server.Start();
    
                Console.WriteLine("gRPC server listening on port " + Port);
                Console.WriteLine("任意键退出...");
                Console.ReadKey();
    
                server.ShutdownAsync().Wait();
            }
        }

    服务端需要实现SayHello 方法。

    然后是客户端 Program.cs

        class Program
        {
            static void Main(string[] args)
            {
                Channel channel = new Channel("127.0.0.1:9007", ChannelCredentials.Insecure);
    
                var client = new gRPC.gRPCClient(channel);
                var reply= client.SayHello(new HelloRequest { Name = "LineZero" });
                Console.WriteLine("来自" + reply.Message);
    
                channel.ShutdownAsync().Wait();
                Console.WriteLine("任意键退出...");
                Console.ReadKey();
            }
        }

    然后我们将Client 和Server 都生成一下。

    分别到对应的目录执行,首先启动gRPCServer ,然后执行gRPCClient。

    成功进行通信了,实现了gRPC。

    本文源码GitHub:https://github.com/linezero/Blog/tree/master/gRPCDemo 

    如果你觉得本文对你有帮助,请点击“推荐”,谢谢。

  • 相关阅读:
    SharePoint服务器场环境安装升级补丁的详细步骤
    备注:常用Js脚本
    XMLHttpRequest对象使用示例
    TroubleShoot: SharePoint管理中心503错误,由于配置问题,无法加载模块 DLLowssvr.dll
    递归获取SharePoint文档库文件夹内的所有文件
    Datatable分页通用方法
    递归绑定树形菜单
    sharepoint发布站点匿名登陆访问不了文档库和表单库的解决办法
    Microsoft Office SharePoint Server 2007的文件目录结构
    Sharepoint母版页的应用
  • 原文地址:https://www.cnblogs.com/linezero/p/grpc.html
Copyright © 2020-2023  润新知