Rpc简单入门
RPC这个概念大家都应该很熟悉了,这里不在累述了;使用场景可以参考这篇,本篇主要分享下Thrift和Grpc在.Net Core环境下使用入门。Thirft或者Grps 都支持跨语言、跨平台的Rpc框架。编写IDL文件通过其强大的代码生成引擎生成C#代码,然后编写服务器端和客户端代码进行交互。
Thrift 入门demo
创建两个控制台程序(client和service端)和一个类库,三个项目都分别安装thrift包;
Install-Package apache-thrift-netcore -Version 0.9.3.2;
简单实现一个远程调用用户中心服务,获取用户信息;
项目截图如下:

步骤1:下载Thrift放到指定盘;
我的是放到E:\Thrift下。
步骤2:编写.thrift文件
namespace csharp Thrift.Contract
service UserService{
User Get(:i32 id)
}
struct User
{
: required i64 Id;
: required string Name;
: optional string Remark;
}
步骤3:生成对应的代码
执行命令:thrift.exe --gen csharp UserServices.thrift
会看到生成的文件

把生成的项目拷到Thrift.Contract项目下; 并新增一个实现类
public class UserServiceImpl : Iface
{
public User Get(int id)
{
return new User
{
Id=,
Name="成天",
Remark="热爱编程,热爱分享,热爱..."
};
}
}
步骤4:编写服务端
private const int port = ;
static void Main(string[] args)
{ Console.WriteLine("用户中心RPC Server已启动...");
TServerTransport transport = new TServerSocket(port);
var processor = new UserService.Processor(new UserServiceImpl());
TServer server = new TThreadedServer(processor, transport); //如果多个服务实现的话,也可以这样启动;
//var processor2 = new Manulife.DNC.MSAD.Contracts.PayoutService.Processor(new PayoutServiceImpl());
//var processorMulti = new Thrift.Protocol.TMultiplexedProcessor();
//processorMulti.RegisterProcessor("Service1", processor1);
//processorMulti.RegisterProcessor("Service2", processor2);
//TServer server = new TThreadedServer(processorMulti, transport);
// lanuch
server.Serve();
}
步骤5:编写客户端
static void Main(string[] args)
{
TTransport transport = new TSocket("localhost", );
TProtocol protocol = new TBinaryProtocol(transport); var client = new UserService.Client(protocol);
transport.Open(); var userResult = client.Get(); Console.Write($"rpc->UserResult:{userResult.Name},{userResult.Remark}" ); transport.Close(); Console.ReadKey();
}
然后运行服务端和客户端调用结果如下图:

Grpc 入门demo
Grpc代码工具通过nuget安装Grpc.Tools获取,把grpc_csharp_plugin和protoc放到对应的盘中;代码实现与thrift一样的需求;项目分别安装Grpc包
- Install-Package Google.Protobuf -Version 3.6.0
- Install-Package Grpc -Version 1.13.1
步骤1:编写.proto文件
syntax = "proto3"; option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";
option objc_class_prefix = "HLW"; package Grpc.Contract; service UserService {
rpc GetUser (GetUserRequest) returns (GetUserResponse) {}
} message GetUserRequest {
int32 Id = ;
} message GetUserResponse {
int64 Id=;
string Name=;
string Remark=;
}
步骤2:生成对应的代码
执行命令:protoc.exe -I=. --csharp_out=. --grpc_out=. --plugin=protoc-gen-grpc=grpc_csharp_plugin.exe UserServices.proto

然后把生成的代码拷贝到Grpc.Contract;并新增一个实现类
public class UserServiceImpl: UserService.UserServiceBase
{ public override Task<GetUserResponse> GetUser(GetUserRequest request, ServerCallContext context)
{
return Task.FromResult(new GetUserResponse {
Id = ,
Name = "成天",
Remark = "热爱编程,热爱分享,热爱..."
});
}
}
步骤3:编写服务端
const int port = ;
static void Main(string[] args)
{ Console.WriteLine("用户中心RPC Server已启动...");
Server server = new Server
{
Services = { UserService.BindService(new UserServiceImpl()) },
Ports = { new ServerPort("localhost", port, ServerCredentials.Insecure) }
}; server.Start();
Console.ReadKey();
}
步骤4:编写客户端
Channel channel = new Channel("127.0.0.1:50051", ChannelCredentials.Insecure);
var client = new UserService.UserServiceClient(channel);
var userResult = client.GetUser(new GetUserRequest{ Id = });
Console.Write($"rpc->UserResult:{userResult.Name},{userResult.Remark}");
channel.ShutdownAsync().Wait();
Console.ReadKey();
然后运行服务端和客户端调用结果如下图:

到此这两种流行的rpc框架使用介绍完毕,是不是很简单。
Rpc简单入门的更多相关文章
- [推荐] 网络侦查工具 NMAP 简单入门
[推荐] 网络侦查工具 NMAP 简单入门 # 前言 作为一只运维开发,总是避不开要和网络打交道的.尤其是当自身能力到达瓶颈,开始从事云计算以求突破.会有搭建多台虚拟机的需要,这时候如果在手工的查询 ...
- 用IntelliJ IDEA创建Gradle项目简单入门
Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...
- [原创]MYSQL的简单入门
MYSQL简单入门: 查询库名称:show databases; information_schema mysql test 2:创建库 create database 库名 DEFAULT CHAR ...
- Okio 1.9简单入门
Okio 1.9简单入门 Okio库是由square公司开发的,补充了java.io和java.nio的不足,更加方便,快速的访问.存储和处理你的数据.而OkHttp的底层也使用该库作为支持. 该库极 ...
- emacs最简单入门,只要10分钟
macs最简单入门,只要10分钟 windwiny @2013 无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...
- 【java开发系列】—— spring简单入门示例
1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...
- Docker 简单入门
Docker 简单入门 http://blog.csdn.net/samxx8/article/details/38946737
- Springmvc整合tiles框架简单入门示例(maven)
Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...
- git简单入门
git简单入门 标签(空格分隔): git git是作为程序员必备的技能.在这里就不去介绍版本控制和git产生的历史了. 首先看看常用的git命令: git init git add git comm ...
随机推荐
- xcode项目打不开:incompatible project version问题
低版本xcode打开高版本xcode项目或库工程的时候就会出现,打不开的问题 解决 1可以重建创建工程,将文件拷贝到新工程 2 相对一,较简单 找到.xcodeproj文件 右键 显示包内容,找到pr ...
- Socket 多线程编程
前面一片学习了TCP/IP的基础网络编程,并给出了简单的服务端与客户端通信交互的例子.还介绍了UPC的通信例子. 这次学习TCP/IP的多线程编程.因为涉及到TCP/IP一般都是多线程,服务端会一直监 ...
- linux主机名设置
有时会报错: 代理抛出异常错误: java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostExcept ...
- 通过类名或者jar名查询所在jar包
一.问题 例如我想查看一下FilterSecurityInterceptor的源码,但是我不知道它在maven依赖中的哪个jar包中 二.解决方案 http://www.findmaven.net/ ...
- IJ配置项目的TOMCAT
参考文档: IJ里配置TOMCAT http://jingyan.baidu.com/album/0a52e3f43d9f69bf62ed72f9.html?picindex=11 源发行版1.8 需 ...
- http协议基本原理
HTTP(HyperText Transport Protocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616.HTTP协议采用了请求/响应模型 ...
- jvm参数与GC
一.JVM的新生代.老年代.与永久代 JVM中的堆,一般分为三大部分:新生代.老年代.永久代: 1.新生代:主要是用来存放新生的对象,一般占据堆的1/3空间.由于频繁创建对象,所以新生代会频繁触发Mi ...
- centos7图形界面
安装centOS7服务器版本,系统默认是不会安装GUI的图形界面程序,这个需要手动安装CentOS7 Gnome GUI包. 安装GUI包.开机自动启动图形界面.重启 # yum groupinsta ...
- CPP全面总结(涵盖C++11标准)
OOP之类和对象 1. this指针的引入 每个成员函数都有一个额外的隐含的形参,这个参数就是this指针,它指向调用对象的地址.默认情况下,this的类型是指向类类型非常量版本的常量指针.可以表示成 ...
- KeepAlived+Nginx 安装
yum install -y gcc gcc-c++ openssl openssl-devel 目前keepalived最新版本下载:[root@rhel ~]#wget -c http://www ...