• 参考资料,和详细背景不做赘述。
  • 首先定义prop 文件
    syntax  ="proto3";
    package RouteGrpc;
    service HelloWorld{
    rpc SayHello(HellowRequest)returns (ReturnsString){}
    }
    message HellowRequest{
    string Title=;
    string Content=;
    } message ReturnsString{
    string Content=;
    }
  • 然后根据prop文件生成对应的客户端和服务端的代码(这里要提前准备protoc.exe和grpc_csharp_plugin.exe)
    tools\protoc.exe -I protos --csharp_out out HelloGrpc.proto --plugin=protoc-gen-grpc=tools\grpc_csharp_plugin.exe
    //-I 工作目录
    // --grpc_out 第一个参数是表示输出文件目录 第二个参数表示 描述文件名称(protobuf文件)
    // --csharp_out 和grpc_out 参数相同
    //--plugin= 表示输出c#的插件
    tools\protoc.exe -I protos --grpc_out outgrpc HelloGrpc.proto --plugin=protoc-gen-grpc=tools\grpc_csharp_plugin.exe //服务相关
  • 生成之后服务端实现Sayhellow相关方法
     public class HelloService:HelloWorld.HelloWorldBase
    {
    public override Task<ReturnsString> SayHello(HellowRequest request, ServerCallContext context)
    {
    return Task.FromResult(new ReturnsString { Content = "Hello " + request.Title +"端口9007"});
    }
    }
  • 最终客户端和服务端代码(一共有四种RPC 这里只实现最简单的那种其它类似)
    namespace Service
    {
    class Program
    {
    const int Port = ; static void Main(string[] args)
    {
    Server server = new Server
    {
    Services = { HelloWorld.BindService(new HelloService()) },
    Ports = { new ServerPort("localhost", Port, ServerCredentials.Insecure) }
    };
    server.Start();
    Console.WriteLine("RouteGuide server listening on port " + Port);
    Console.WriteLine("Press any key to stop the server...");
    Console.ReadKey();
    server.ShutdownAsync().Wait();
    }
    }
    }
    namespace Client
    {
    class Program
    {
    static void Main(string[] args)
    {
    Channel channel = new Channel("127.0.0.1:9007", ChannelCredentials.Insecure);
    var client = new HelloWorld.HelloWorldClient(channel);
    var retrunstr = client.SayHello(new HellowRequest() { Title = "this is message", Content = "this is content" });
    //var retrunstr = await client.SayHelloAsync(new HellowRequest() { Title = "this is message", Content = "this is content" });
    Console.WriteLine("来自" + retrunstr.Content);
    channel.ShutdownAsync().Wait();
    Console.WriteLine("任意键退出...");
    Console.ReadKey();
    }
    }
    }
  • 项目结构

netcore 实现一个简单的Grpc 服务端和客户端的更多相关文章

  1. 编写一个简单的TCP服务端和客户端

    下面的实验环境是linux系统. 效果如下: 1.启动服务端程序,监听在6666端口上  2.启动客户端,与服务端建立TCP连接  3.建立完TCP连接,在客户端上向服务端发送消息 4.断开连接 实现 ...

  2. 【.NET6】gRPC服务端和客户端开发案例,以及minimal API服务、gRPC服务和传统webapi服务的访问效率大对决

    前言:随着.Net6的发布,Minimal API成了当下受人追捧的角儿.而这之前,程序之间通信效率的王者也许可以算得上是gRPC了.那么以下咱们先通过开发一个gRPC服务的教程,然后顺势而为,再接着 ...

  3. gRPC初探——概念介绍以及如何构建一个简单的gRPC服务

    目录 引言 1. gRPC简介 2. 使用Protocol Buffers进行服务定义 2.1 定义消息 2.2 定义服务接口 3.构建简单的gRPC服务 3.1 编写proto文件,定义消息和接口 ...

  4. [C语言]一个很实用的服务端和客户端进行TCP通信的实例

    本文给出一个很实用的服务端和客户端进行TCP通信的小例子.具体实现上非常简单,只是平时编写类似程序,具体步骤经常忘记,还要总是查,暂且将其记下来,方便以后参考. (1)客户端程序,编写一个文件clie ...

  5. 动手实现一个较为简单的MQTT服务端和客户端

    项目地址:https://github.com/hnlyf168/DotNet.Framework 昨天晚上大致测试了下 ,490个客户端(一个收一个发)  平均估计每个每秒60个包  使用mqtt协 ...

  6. socket手写一个简单的web服务端

    直接进入正题吧,下面的代码都是我在pycharm中写好,再粘贴上来的 import socket server = socket.socket() server.bind(('127.0.0.1', ...

  7. 用python开发了一个简单apache web服务端范例,在win10 + apache2.4.9 + python3.5 测试成功

    #!D:\Programs\Python\Python35-32\python.exe import cgi def htmlTop():     print("Content-type: ...

  8. [C语言]一个很实用的服务端和客户端进行UDP通信的实例

    前段时间发了个TCP通信的例子,现在再来一个UDP通信的例子.这些可以作为样本程序,用到开发中.“裸写”socket老是记不住步骤,经常被鄙视…… 下面的例子很简单,写一个UDP的server用于收包 ...

  9. 简单的UDP服务端和客户端示例

    UDP的理论不再多说,我这里直接给出一个关于UDP的HelloWorld程序,代码明了,希望对刚入门的学生有所帮助! 当然,实际上,在这块我也刚入门! 首先写服务端代码,服务端邦定本地的IP和端口来监 ...

随机推荐

  1. Django-ORM和MySQL事务及三大范式介绍

    Django中操作操作数据库这里需要改一个数据: 模型层:就是与跟数据库打交道 ORM查询: 一.单表操作必知必会13条: orm默认都是惰性查询: 1.all() 查询所有 2.filter() 筛 ...

  2. JAVA笔记5-package和import

    1.基本介绍 为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java引入包(package)机制,提供类的多重类命名空间.在实际项目开发中任何类都应该定义在包中. (1)package语 ...

  3. vue 绑定class、v-bind:style(对象语法、数组语法)

    绑定 HTML Class 我们可以传给 v-bind:class 一个对象,以动态地切换 class: 内联样式在模板里 <div id="div1" :class=&qu ...

  4. [Linux系统] (7)Keepalived高可用

    一.解决LVS server单点故障 如果集群中只有一台LVS server提供数据包分发服务,如果宕机,则会导致所有的业务重点,因为所有的请求都无法到达后面的Real server. 此时我们可以采 ...

  5. 让IE8一下兼容CSS3选择器

    来自英国的网页开发工程师Keith Clark 开发了一个JavaScript方案来使IE支持CSS3选择器.该脚本支持从IE5到IE8的各个版本. 首先,您需要下载DOMAssistant脚本和ie ...

  6. 【LOJ3156】「NOI2019」回家路线

    [题目链接] [点击打开链接] [题目概括] 现在有\(n\)个站点,\(m\)条火车路线,每一条货车路线都有一个起点站点.终点站点.开始时间和到站时间. 对于一直在起点\(1\)的人,终点是\(n\ ...

  7. Linux 打印简单日志(一)

    简单日志输出: #include<stdio.h> #include<string.h> #include<stdlib.h> void write(char* f ...

  8. PyQt5 & Qt Designer使用小结

    开始在知乎写文章的原因,主要还是想整理平时的经验,方便自己以后查看,有机会的话大家也可以交流吧. 11月中旬由于项目需要,和另一名实习生负责使用Python开发一个数据分析的小软件. 虽然才开始接触Q ...

  9. Unity3D_(API)Quaternion四元数中的Quaternion.LookRotation()

    四元数百度百科: 传送门 四元数官方文档: 传送门 欧拉旋转.四元数.矩阵旋转之间的差异: 传送门 四元数转换为欧拉角eulerAngles 官方文档: 传送门 欧拉角转换为四元数Euler 官方文档 ...

  10. linux下快速查找文件(转载)

    权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/xxmonstor/article/deta ...