zoukankan      html  css  js  c++  java
  • .NET使用gRPC

    引用网址:https://www.cnblogs.com/jiamiemie/p/10451388.html

    gRPC 简单介绍:

    grpc 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.

    gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。

    参考文档:

    http://doc.oschina.net/grpc?t=57966

    新建工程GrpcClient、GrpcServer和GrpcLibrary

       添加 - 新建项目 - 控制台应用 GrpcClient、GrpcServer。

       添加 - 新建项目 - 类库 GrpcLibrary。 工程中的三个项目情况如下: 

     使用程序包管理器控制台

    安装程序包Grpc

       三个项目GrpcClient、GrpcServer、GrpcLibrary均安装程序包Grpc。

    1
    Install-Package Grpc

      

    安装程序包Google.Protobuf 

    三个项目GrpcClient、GrpcServer、GrpcLibrary均安装程序包Google.Protobuf 。

    1
    Install-Package Google.Protobuf

     同上操作

    安装程序包Grpc.Tools

     类库GrpcLibrary安装程序包Grpc.Tools。

    1
    Install-Package Grpc.Tools

      

    自定义服务

      在项目GrpcLibrary里添加HelloWorld.proto用以生成代码。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    syntax = "proto3";
    package GrpcLibrary;
    service GrpcService {
      rpc SayHello (HelloRequest) returns (HelloReply) {}
    }
      
    message HelloRequest {
      string name = 1;
    }
      
    message HelloReply {
      string message = 1;
    }

     

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

    注意:生成协议代码需 protoc.exe、grpc_csharp_plugin.exe工具.
    在.net framework 项目下引用安装 Grpc.Tools 会得到protoc.exe、grpc_csharp_plugin.exe,但.net core 项目引用安装是不会下载工具到项目目录的,所以我们需要建一个.net framework项目,
    我建了个.net framework类库执行Install-Package Grpc.Tools用于引用安装得到工具。

    获取grpc C# 的.cs文件

    从packages\Grpc.Tools.1.19.0\tools\windows_x64文件夹下复制grpc_csharp_plugin.exe,protoc.exe复制到GrpcLibrary文件夹下

    在GrpcLibrary下创建1.cmd文件,输入一下内容并保存

    1
    protoc -I . --csharp_out . --grpc_out . --plugin=protoc-gen-grpc=grpc_csharp_plugin.exe HelloWorld.proto

      

    双击执行

    命令执行成功后,GrpcLibrary目录下会生成HelloWorld.cs和HelloWorldGrpc.cs。(记得包含到项目中)

    最后GrpcClient、GrpcServer分别引用类库GrpcLibrary。

    服务端

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    class GrpcImpl : GrpcService.GrpcServiceBase
    {
        // 实现SayHello方法
        public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
        {
            return Task.FromResult(new HelloReply { Message = "Hello " + request.Name });
        }
    }
    class Program
    {
        const int Port = 10007;
     
        public static void Main(string[] args)
        {
            Server server = new Server
            {
                Services = { GrpcService.BindService(new GrpcImpl()) },
                Ports = { new ServerPort("localhost", Port, ServerCredentials.Insecure) }
            };
            server.Start();
     
            Console.WriteLine("GrpcService server listening on port " + Port);
            Console.WriteLine("任意键退出...");
            Console.ReadKey();
     
            server.ShutdownAsync().Wait();
        }
    }

      

    客户端

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class Program
       {
           static void Main(string[] args)
           {
               Console.WriteLine("Hello World!");
               Channel channel = new Channel("127.0.0.1:10007", ChannelCredentials.Insecure);
     
               var client = new GrpcService.GrpcServiceClient(channel);
            
               var input = Console.ReadLine();
               var reply = client.SayHello(new HelloRequest { Name = input });
               Console.WriteLine("来自" + reply.Message);
                
               channel.ShutdownAsync().Wait();
               Console.WriteLine("任意键退出...");
               Console.ReadKey();
           }
       }

      

    测试

    先启动服务的,再启动客户端。

  • 相关阅读:
    实现centos系统的自动化安装部署
    加密与CA证书的创建
    Linux系统启动和内核管理
    进程,系统性能和计划任务
    第十七周运维作业
    第十六周运维作业
    第十四周运维作业
    第十三周运维作业
    第十二周运维作业
    第十一周运维作业
  • 原文地址:https://www.cnblogs.com/bruce1992/p/15696890.html
Copyright © 2011-2022 走看看