介绍

RPC是远程过程调用(Remote Procedure Call)的缩写形式。SAP系统RPC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。

gRPC,A high-performance, open-source universal RPC framework,Google开源的高性能的RPC框架,基于ProtoBuf序列化协议进行开发,多种语言支持(Golang、PHP、C++、Java等)支持,面向HTTP/2标准设计。

官方文档:https://grpc.io/about/

应用场景

  • 低延时、高可用的分布式系统
  • 使用ProtoBuf,独立于语言的协议
  • 负载均衡,日志系统,监控系统等

Protobuf

是Google开发的一个网络通信协议,提供了高效率的序列化和反序列化机制,序列化就是把对象转换成二进制数据发送给服务端,反序列化就是将收到的二进制数据转换成对应的对象。官方版本支持Go,C++,Java,Python等语言。

Protobuf优点

  • 体积小,效率高
  • 使用简单,兼容性好,维护简单
  • 加密性好
  • 跨平台

安装ProtoBuf

go get -u google.golang.org/grpc

获取编译器Protoc

wget https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz
tar -xzvf protobuf-2.6.1.tar.gz
cd protobuf-2.6.1
./configure --prefix=/usr/local/protobuf
make
make installvim /etc/profile
export PATH=$PATH:/usr/local/protobuf/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib

获取 protoc-gen-go

go get github.com/golang/protobuf/protoc-gen-gocd github.com/golang/protobuf/protoc-gen-gogo buildgo install

获取proto库

go get github.com/golang/protobuf/protocd github.com/golang/protobuf/protogo buildgo install

实例

says_rpc.proto

syntax = "proto2";// This file relies on plugins to generate service code.
option cc_generic_services = true;
option java_generic_services = true;
option py_generic_services = true;package gg_rpc;option go_package = "pb_models/gg_rpc";message RpcRequest {required string name = 1;
}message RpcReply {required string message = 1;
}service Greeter {rpc RpcCall(RpcRequest) returns (RpcReply) ;
}

rpc_server.go

package mainimport ("context""fmt""google.golang.org/grpc"pb "pb_models/gg_rpc""log""net""github.com/golang/protobuf/proto"
)const(Port = ":10010"
)type server struct {}func (s *server) RpcCall(Ctx context.Context, In *pb.RpcRequest) (*pb.RpcReply, error) {log.Printf("Received : %v", In.GetName())Msg := fmt.Sprintf("Hello : %v " , In.GetName())return &pb.RpcReply{Message: proto.String(Msg)}, nil
}func main() {Socket, Err := net.Listen("tcp", Port)if Err != nil {log.Fatalf("failed to listen : %v .", Err)}   Rpc := grpc.NewServer()pb.RegisterGreeterServer(Rpc, &server{})if Err := Rpc.Serve(Socket); Err != nil {log.Fatalf("failed to service : %v .", Err)}
}

rpc_client.go

package mainimport ("context""google.golang.org/grpc"pb "pb_models/gg_rpc""log""fmt""os""github.com/golang/protobuf/proto""time"
)const (Address = "localhost:10010"DefaultName = "Carter"
)func main() {Conn, Err := grpc.Dial(Address, grpc.WithInsecure())if Err != nil {log.Fatalf("did not connect : %v .", Err)}defer Conn.Close()Client := pb.NewGreeterClient(Conn)fmt.Println("grpc client start.")Name := DefaultNameif len(os.Args) > 1 {Name = os.Args[1]}Ctx, Cancel := context.WithTimeout(context.Background(), time.Second)defer Cancel()RpcResult, RpcError := Client.RpcCall(Ctx, &pb.RpcRequest{Name : proto.String(Name)})if RpcError != nil {log.Fatalf("could not greet %v .", RpcError)}log.Printf("Greeting: %v .", RpcResult.GetMessage())
}

编译命令

protoc --go_out=plugins=grpc:. gg_rpc.protogo build rpc_server.go
go build rpc_client.go 

运行结果

Go语言 gRPC 实践(一)相关推荐

  1. 高德渲染网关Go语言重构实践

    1.导读 高德启动Go业务建设已经有段时间了,主要包含Go应用落地,Go中间件建设,云原生三个部分.经过持续的发力,在这些方面取得了不错的进展.高德Go业务落地过程是如何实现的,遇到过哪些问题,如何解 ...

  2. UA MATH571A R语言回归分析实践 多元回归2 医疗费用的决定

    UA MATH571A R语言回归分析实践 多元回归2 医疗费用的决定 系数的推断与模型预测 模型诊断 这一讲展示一下一元回归中的模型诊断的手段怎么用在多元回归中,同时介绍一下多元回归做推断和预测的方 ...

  3. UA MATH571A R语言回归分析实践 多元回归1 医疗费用的决定

    UA MATH571A R语言回归分析实践 多元回归1 医疗费用 基础回归分析 这一讲开始讨论多元回归,这里选择的例子是寻找家庭医疗费用的决定因素.家庭医疗费用由哪些因素决定是卫生经济学.保险精算等领 ...

  4. UA MATH571A R语言回归分析实践 一元回归4 NBA球员的工资

    UA MATH571A R语言回归分析实践 一元回归4 NBA球员的工资 Box-Cox变换 Full Model 模型再诊断 总结 上一讲对一元线性回归模型进行了诊断,发现模型主要存在三个问题: 工 ...

  5. UA MATH571A R语言回归分析实践 一元回归3 NBA球员的工资

    UA MATH571A R语言回归分析实践 一元回归3 NBA球员的工资 残差分析 正态性.同方差性的检验 欠拟合检验 前两讲已经完成了大致的分析了,我们已经明确了NBA球员名次与工资的负相关关系,接 ...

  6. UA MATH571A R语言回归分析实践 一元回归2 NBA球员的工资

    UA MATH571A R语言回归分析实践 一元回归2 NBA球员的工资 方差分析 相关性分析 上一讲完成了解释NBA球员工资的一个简单的一元线性回归模型的估计.分析,展示了一下简单的预测,这一讲我们 ...

  7. UA MATH571A R语言回归分析实践 一元回归1 NBA球员的工资

    UA MATH571A R语言回归分析实践 一元回归1 NBA球员的工资 基础回归分析 571A另一个系列的文章介绍了回归分析的理论,这个系列的文章介绍R语言做回归分析的实践,但不会涉及R语言编程,只 ...

  8. c语言程序设计实践课选题,c语言程序设计实践实验题目

    c语言程序设计实践实验题目 绥化学院程序设计实践实验报告范例 参考1实验题目:循环结构程序设计实验目的:1.熟悉 VC++6.0 的运行环境,掌握 C 程序的执行方法:2.掌握三种基本数据类型.部分运 ...

  9. C语言实践作业报告,c语言社会实践报告

    资料简介 c 语言社会实践报告 c 语言社会实践报告 随着个人素质的提升,越来越多的事务都会使用到报告,报告 中提到的所有信息应该是准确无误的. 相信许多人会觉得报告很难写 吧,下面是为大家的 c 语 ...

最新文章

  1. 编译器设计-有限自动机
  2. 【原创】PostgreSQL 增量备份详解以及相关示例
  3. Vue-Cli Error: EACCES: permission denied 解决方案
  4. 百里香Spring测试的意见
  5. 编程神回复:数学不好能学编程吗?网友的回复令人满怀信心!
  6. 鬼谷子72术,完整收藏
  7. python plt 批量修改全局样式
  8. Vue学习笔记之05-条件判断
  9. 在中国网络管理技术大会上的主题演讲
  10. 如何将符号保存到php数据库当中并且打印出来!
  11. 上海亚商投顾:三大指数小幅下跌 两市成交金额创年内新低
  12. .net 和 j2ee的区别
  13. 易基因|脂多糖诱导的仔猪肝脏损伤模型中m6A RNA甲基化介导了NOD1/NF-kB信号激活
  14. c语言factors函数的意思,factors是什么意思_factors的翻译_音标_读音_用法_例句_爱词霸在线词典...
  15. Java实现 LeetCode 717 1比特与2比特字符(暴力)
  16. 树莓派数据上传数据库_树莓派内部数据向domoticz的上传
  17. alter命令的使用
  18. 如何判断两个随机变量是否独立,同分布
  19. 基于java的springboot疫情疫苗预约系统毕业设计springboot开题报告
  20. Allegro如何出Gerber文件

热门文章

  1. 大数据实效_全流程监督 让大数据督查取得实效
  2. 表达式_ya是不合法的c语言标识符,高级语言程序设计复习题.doc
  3. python编写查询_如何用python脚本编写查询
  4. element的滚动去掉横向_textarea去掉滚动条 textarea横向或纵向滚动条的去掉方法
  5. java面试题十二 String返回类型
  6. 无基础人员转行做机器学习可以吗?
  7. 大妈也能看懂的大数据分布式计算
  8. VUE data传值
  9. 河南智游科技 超市管理系统
  10. wms地图绘制工具_GeoServer地图开发解决方案(四):发布Web地图服务(WMS)篇