gRPC .NET Core跨平台学习

前些天发布gRPC C# 学习,在.NET Framework 中使用gRPC ,今天来学习 .NET Core gRPC。

gRPC 的.NET Core 包在NuGet 上发布了,结合.NET Core 实现gRPC 完美跨平台。

本篇主要讲解 .NET Core 版gRPC客户端运行在Ubuntu系统上,与局域网内的服务端通信。

下面我们来正式开始。

在之前的代码基础开发.NET Core版。

本文运行环境:

服务端:WIN10 x64

客户端:Ubuntu 14.04

添加.NET Core版gRPC Client

首先我们打开之前的gRPCDemo 代码,GitHub:https://github.com/linezero/Blog/tree/master/gRPCDemo 。

添加一个.NET Core 控制台应用 gRPCNETCoreClient

然后在 gRPCNETCoreClient 项目上添加引用:

Install-Package Grpc -Pre

移植传统类库至.NET Core类库

安装好Grpc 以后我们就可以来移植类库了,这里我们首先创建一个gRPCNETCoreDemo Class Library。

新建好以后我们将 project.json 文件更改为如下:

{

  "version": "1.0.0-*",

  "frameworks": {

    "net452": {

      "dependencies": {

        "Grpc": "1.0.0",

        "Grpc.Core": "1.0.0",

        "Google.Protobuf": "3.0.0",

        "System.Interactive.Async": "3.0.0"

      }

    },

    "netstandard1.6": {

      "imports": "dnxcore50",

      "dependencies": {

        "NETStandard.Library": "1.6.0",

        "Grpc": "1.0.1-pre1",

        "Grpc.Core": "1.0.1-pre1",

        "Google.Protobuf": "3.1.0",

        "System.Interactive.Async": "3.1.0-rc"

      }

    }

  }

}

这样类库就能支持.NET Framework 4.5.2 以及 .NET Core。

这里我省略了生成代码,直接将gRPCDemo 中的类复制过来。然后gRPCNETCoreClient 添加gRPCNETCoreDemo 引用。

gRPCNETCoreClient 中Program.cs 添加如下代码,基本上和上篇代码一致,新增了控制台编码输出格式。


    public class Program{     
       
public static void Main(string[] args){Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);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 .NET Core Client" });Console.WriteLine("来自" + reply.Message);channel.ShutdownAsync().Wait();Console.WriteLine("任意键退出...");Console.ReadKey();}}

代码编写好以后,我们来执行gRPCServer ,然后使用dotnet run 执行 gRPCNETCoreClient。

成功通信,证明支持.NET Core。 

发布至Ubuntu系统运行

下面将gRPCNETCoreClient 发布至Ubuntu系统跨平台运行。

代码绑定ip需要稍作调整。

查看本地ip 是多少,将gRPCServer 中的localhost 改成本地ip ,并将 Client的127.0.0.1 也改成本地ip。

发布 gRPCNETCoreClient

dotnet publish 

将发布后的目录复制到 Ubuntu 系统。

下面先在本地启动Server  ,然后在Ubuntu系统执行Client 。

成功在Ubuntu 系统上通信,这里服务端是运行在本地,客户端是在另外一台机器上。

相关文章: 

  • 谷歌发布的首款基于HTTP/2和protobuf的RPC框架:GRPC

  • C#中使用gRPC

  • Google高性能RPC框架gRPC 1.0.0发布

原文地址:http://www.cnblogs.com/linezero/p/grpcnetcore.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA导入Maven项目,pom.xml文件中 有inspects a maven model for resolution problems报错 !!!!!!!!!!有用

IDEA导入Maven项目,pom.xml文件中 有inspects a maven model for resolution problems报错 2018年08月06日 22:13:09 东方不能败 阅读数:4616 我是导入一个已经写好的Maven工程,导入后返现在pom.xml文件中有inspects a maven model for res…

Windows Server 2016提供Docker原生运行的企业级支持

Windows Server 2016已原生支持Docker,这使得Windows应用可运行在容器中。该评估版目前已经可用,期望于本月底之前,Microsoft将提供从评估版到RTM的升级路径。该评估版发布于上周的Microsoft Ignite大会上,同时还发布了Microsoft和…

arm linux串口控制led,通信程序设计 - Linux下ARM和单片机的串口通信设计

3 通信程序设计ARM 与单片机的串口通信程序包括两方面: 一方面是作为上位机的ARM 的串口通信程序,另一方面是作为下位机的单片机的串口通信程序。在通信之前必须制定合理的通信协议以保证通信的可靠性和成功率。现约定双方通信协议如下:( 1) …

为什么我强烈建议大家使用枚举来实现单例

转载自 为什么我墙裂建议大家使用枚举来实现单例 关于单例模式,我的博客中有很多文章介绍过。作为23种设计模式中最为常用的设计模式,单例模式并没有想象的那么简单。因为在设计单例的时候要考虑很多问题,比如线程安全问题、序列化对单例的…

idea @Data 不起作用找不到 相关的注解

idea中Data标签getset不起作用(这个有用,下面的没用) 2017年06月08日 11:22:40 seapeak007 阅读数:25816 spring cloud中使用Data标签,不用手动添加get set方法,但是如果项目中其他类中使用getset方法,如果报错&…

搭建分布式 ASP.NET Core Web

单台Web处理用户请求的能力是有限的,因此我们可能会需要搭建分布式的Web服务器。 当前市面上,可能用的比较多的是会话保持,这种模式下,开发者只需将先前开发好的、不支持会话共享的程序部署在多台服务器上,负载均衡提供…

五分钟了解CDN

转载自 五分钟了解CDN一、什么是CDN? CDN全称Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。 通过在网络各处放置节点服务器所构成的在现…

Eclipse导入他人的Maven工程报错

一.什么是maven? Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在…

拼图游戏C语言课设实验报告,C语言拼图游戏实验报告.doc

C语言拼图游戏实验报告课程设计实验报告班级:光电104—2 姓名:刘云龙 学号:201058501220一、实验题目:使用C语言编写一个小游戏(拼图游戏)二、实验目的:C语言是每一个通信学生的必修课之一,此次课程设计要求…

.Net开源微型ORM框架测评

什么是ORM? 对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说&am…

大家都在说的分布式系统到底是什么

转载自 大家都在说的分布式系统到底是什么随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架…

2015c语言9月答案,2015年9月计算机二级C语言预测题答案

2015年9月计算机二级C语言预测题答案一、 选择题1、B 2、C 3、D 4、C 5、C 6、D 7、C 8、D 9、C 10、D11、D 12、D 13、B 14、B 15、A 16、D 17、B 18、B 19、C 20、D二、 阅读程序题(1) 6,8 (2) 3.141593,3.1416,3.142 (3) 4 (4) 2,4 (5) 8三、 程序填空…

Redis集群~StackExchange.Redis(10月6号版1.1.608.0)连接Twemproxy支持Auth指令了

对于StackExchange.Redis这个驱动来说,之前的版本在使用Proxy为Twemproxy代理时,它是不支持Password属性的,即不支持原始的Auth指令,而我也修改过源代码,为CommandMap添加了Auth但最后测试的结果还是失败了&#xff0c…

使用JDOM2.0.4 操作/解析xml

转载自 使用JDOM2.0.4 操作/解析xml一、解析xml内容 xml文件内容:<?xml version"1.0" encoding"utf-8"?> <RETVAL successtrue> <Shop><sid>1</sid><name>北京鑫和易通贸易有限公司</name></Shop> &l…

c语言关于计算的函数,问个c语言题目,关于一个计算器的有参有返回函数!!!...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼printf("toM");scanf("%d",&toM);if(toM0)printf("错误&#xff0c;除数不能为0\n");else{resultarith_compliment(toN,toM);printf("\n%d",toN);printf("%%");printf(&quo…

TypeScript 2.0 已发布

微软最近发布了TypeScript 2.0&#xff0c;该版本提供了简化的声明文件获取、Non-nullable类型&#xff0c;以及Readonly修饰符。 TypeScript项目经理Daniel Rosenwasser称&#xff0c;他们团队对于该版本“紧随ECMAScript规范&#xff0c;为JavaScript库和工具提供了更广泛的支…

springboot创建项目2 开发环境的搭建

我也学习了一下 才想着去写个对应的服务器 前端已经全部搭建好了 有很多的坑 你们就不用再次采坑了 我只讲其中的 服务器部分 中间有好多 以后补充吧。。。。

XML解析(二),DOM解析XML

转载自 XML解析&#xff08;二&#xff09;&#xff0c;DOM解析XML上篇文章向大家介绍了SAX解析XML,为了这篇文章理解起来更加方便&#xff0c;所以还没看过SAX解析XML文章的&#xff0c;请戳这【XML解析&#xff08;一&#xff09;】SAX解析XML &#xff0c;这次给大家带来X…

如何通过反射将字符串转换为类

package org.entity; /*** 本案例演示如何通过反射将字符串转换为类* */ public class Test {public static void main(String[] args) {String user "org.entity.User";//字符串是该类的全限定名try {Class clzz Class.forName(user);Object classObjclzz.newInst…