tnblog
首页
视频
资源
登录

Grpc远程过程调用

5802人阅读 2021/3/22 23:27 总访问:106002 评论:0 收藏:0 手机
分类: GRpc

  前  言

tnblog

 Grpc 跨平台 跨语言的Rpc(远程过程调用)框架   Rpc框架有许多种 Grpc 使用传输数据格式为 Protbuf二进制的数据格式进行传输.

特点:让开发者可以像调用本地方法一样调用远程服务器的方法


 1.创建GrpcService项目

    1.1创建.proto后缀文件 

  1. syntax = "proto3";
  2. option csharp_namespace = "RmTonyCustomGrpcServer";
  3. package greet;
  4. //1、定义接口名字
  5. service TonyService{
  6.     
  7.  rpc TonySay (TonyRequestreturns (TonyResponse);
  8. }
  9. // 2、定义入参(类)
  10. message TonyRequest{
  11.     string name = 1;
  12. }
  13. // 3、定义出参(类)
  14. message TonyResponse{
  15.     string message = 1;
  16. }

注:这里的1是一个标识 非值 


对应接口实现

  1. /// <summary>
  2.     /// 1、实现类
  3.     /// </summary>
  4.     public class TonyServiceImpl : TonyService.TonyServiceBase
  5.     {
  6.         public override Task<TonyResponse> TonySay(TonyRequest request, ServerCallContext context)
  7.         {
  8.             Console.WriteLine($"grpc:{request.Name}");
  9.             return Task.FromResult(new TonyResponse
  10.             {
  11.                 Message = "Hello " + request.Name
  12.             });
  13.         }
  14.     }


Startup.cs

  1.          public void ConfigureServices(IServiceCollection services)
  2.         {
  3.             // 1、开启grpc
  4.             services.AddGrpc();
  5.         }
  6.         // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
  7.         public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  8.         {
  9.             if (env.IsDevelopment())
  10.             {
  11.                 app.UseDeveloperExceptionPage();
  12.             }
  13.             app.UseHttpsRedirection();
  14.             app.UseRouting();
  15.             app.UseEndpoints(endpoints =>
  16.             {
  17.                 // 1、映射grpc服务
  18.                 endpoints.MapGrpcService<TonyServiceImpl>();
  19.                 endpoints.MapGet("/"async context =>
  20.                 {
  21.                     await context.Response.WriteAsync("Hello World!");
  22.                 });
  23.             });
  24.         }


CreateHostBuilder配置

  1.   public static IHostBuilder CreateHostBuilder(string[] args) =>
  2.             Host.CreateDefaultBuilder(args)
  3.                 .ConfigureWebHostDefaults(webBuilder =>
  4.                 {
  5.                     // 1、配置http2协议
  6.                     webBuilder.UseKestrel(options => {
  7.                         options.ConfigureEndpointDefaults(options => {
  8.                             options.Protocols = HttpProtocols.Http2;
  9.                         });
  10.                     });
  11.                     webBuilder.UseStartup<Startup>();
  12.                 });





创建client端


拷贝生成的 .proto后缀文件到 Protos文件夹
Program.cs

  1. static void Main(string[] args)
  2.         {
  3.             // 1、建立连接
  4.             GrpcChannel grpcChannel = GrpcChannel.ForAddress("https://localhost:5001");
  5.             // 2、客户端创建
  6.             TonyServiceClient tonyServiceClient = new TonyService.TonyServiceClient(grpcChannel);
  7.             // 3、开始调用
  8.             TonyResponse tonyResponse = tonyServiceClient.TonySay(new TonyRequest()
  9.             {
  10.                 Name = "客户端"
  11.             });
  12.             // 4、打印
  13.             Console.WriteLine($"返回值打印:{tonyResponse.Message}");
  14.             grpcChannel.Dispose();
  15.         }


启动 GrpcService


运行GrpcClient


调用Grpc 成功 Grpc夸语言 大家有兴趣可以去尝试

评价

Grpc 四种服务类型介绍

gRPC 有四种服务类型分别是:简单 RPC(Unary RPC)、服务端流式 RPC (Server streaming RPC)、客户端流式 RPC (Client ...

启动Grpc报错:HTTP/2 over TLS is not supported on Windows 7

.net core grpc报错:NotSupportedException: HTTP/2 over TLS is not supported on Windows 7 due to missing ALPN suppor...

.net core 3.0 Grpc自定义服务

服务器端新建gRPC项目右键Protos文件夹--&gt;新建一个.proto,选择协议缓冲区文件,用于描述gRPC的消息和服务名字随便取,...

.net core发布Grpc项目和远程调用

发布gRPC项目的过程和其他项目一样,右键发布即可发布出来后会看到有个.exe的程序然后直接丢到服务器双击运行即可不放到iis...

.net core Grpc base64上传图片文件

客户端前台&lt;div&gt; &lt;inputtype=&quot;file&quot;onchange=&quot;selectImage(this.files)&quot;accept=&quot;&quot...

.net core重写Grpc的方法

第一步F12定义看继承的类里边把里边的方法复制出来把前缀删除一下,前缀太多了不太好看删除掉加个override即可,就可以很方...

Grpc报错Grpc - Unimplemented service

注意新建了服务需要在服务器注册,不然会报gRPC-gRPC-Unimplementedservice注意:并不是代码不报错就说明接口被启动的,因为...

Grpc客户端流requestStream.Current为空的问题

gRPC客户端流requestStream.Current为空的问题流式传输不能直接获取,这样requestStream.Current会为空比如这里我们传递文...

Grpc客户端流式传递多个参数

客户端流式中,想要获取数据先要执行MoveNext一下或者获取到的对象是空的,但是有些时候现在在这之前就传递参数了可以借用M...

.net core Grpc 客户端流式上传图片,文件。Grpc文件分段传输

html前台,完全一样:&lt;formmethod=&quot;post&quot;action=&quot;/home/UpLoadImgStream&quot;enctype=&quot;multipart/f...

发布.net core的Grpc服务

发布.net core的grpc服务,很简单。把发布的文件复制到服务器后,不需要放到iis上面去了,只需要运行那个.exe文件即可

Grpc简介

gRPC简介gRPC gRPC来自 Google,它是一个开源的框架;它同时也是 Cloud Native Computation基金会(CNCF的一部分,就像 Docker...

Grpc Protocol Buffer 消息定义

标量类型gRPC  数值型有很多种形式: double, foat, fint32, int64, uint32, uint64, sint32, sint64, fixed32, fixed 64, ...

.NetCore 3.x 与 Grpc

目录 本篇文章主要讲解如下内容 一。grpc在 .Net Core 3.x 中的应用 二。grpc如何分段上传图片 代码与实现过程比较简单,...

Grpc 在vs中的运用与proto同步

思 考 问 题 grpc 服务器当对 proto 文件进行修改时每次都去 Copy 到本地 Client 是比较麻烦的,有没有快捷的方法解决?Gr...

Grpc调用由于目标计算机积极拒绝,无法连接。

修改端口设置,可能是https造成的代码:publicstaticIHostBuilderCreateHostBuilder(string[]args)=&gt; Host.CreateDefau...
我要变强不变秃
排名
32
文章
20
粉丝
4
评论
15
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术