环境:ubuntu 16.04 64位

安装Go

安装过程省略。

安装完成后设置环境变量

开发工具Gogland

安装过程省略。

安装gRPC

go get google.golang.org/grpc

以上过程需要翻墙

安装成功后,会在GOPATH的第一个目录保存相关文件。

安装protoc和go plug-in

下载protoc

https://github.com/google/protobuf/releases

安装go plug-in

go get -u github.com/golang/protobuf/protoc-gen-go

设置环境变量

运行Gogland创建工程FaceRecgonitionServer

目录结构如下

helloworld.proto

syntax = "proto3";option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";package helloworld;// The greeting service definition.
service Greeter {// Sends a greetingrpc SayHello (HelloRequest) returns (HelloReply) {}rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
}// The request message containing the user's name.
message HelloRequest {string name = 1;
}// The response message containing the greetings
message HelloReply {string message = 1;
}

编译helloworld.proto,生成helloworld.pb.go

编辑server.go

package mainimport ("log""net""golang.org/x/net/context""google.golang.org/grpc"pb "pb/helloworld""google.golang.org/grpc/reflection"
)const (port = ":50051"
)// main is used to implement helloworld.GreeterServer.
type server struct{}// SayHello implements helloworld.GreeterServer
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {return &pb.HelloReply{Message: "Hello " + in.Name}, nil
}
func (s *server) SayHelloAgain(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {return &pb.HelloReply{Message: "Hello again " + in.Name}, nil
}func main() {lis, err := net.Listen("tcp", port)if err != nil {log.Fatalf("failed to listen: %v", err)}s := grpc.NewServer()pb.RegisterGreeterServer(s, &server{})// Register reflection service on gRPC main.reflection.Register(s)if err := s.Serve(lis); err != nil {log.Fatalf("failed to serve: %v", err)}
}

编辑client.go

package mainimport ("log""os""golang.org/x/net/context""google.golang.org/grpc"pb "pb/helloworld"
)const (address     = "localhost:50051"defaultName = "chf"
)func main() {// Set up a connection to the server.conn, err := grpc.Dial(address, grpc.WithInsecure())if err != nil {log.Fatalf("did not connect: %v", err)}defer conn.Close()c := pb.NewGreeterClient(conn)// Contact the server and print out its response.name := defaultNameif len(os.Args) > 1 {name = os.Args[1]}r, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: name})if err != nil {log.Fatalf("could not greet: %v", err)}log.Printf("Greeting: %s", r.Message)r, err = c.SayHelloAgain(context.Background(), &pb.HelloRequest{Name: name})if err != nil {log.Fatalf("could not greet: %v", err)}log.Printf("Greeting: %s", r.Message)
}

设置GOPATH

运行server

运行client

--结束--

使用Go开发gRPC相关推荐

  1. grpc(3):使用 golang 开发 grpc 服务端和client

    1,关于grpc-go golang 能够能够做grpc的服务端和client. 官网的文档: http://www.grpc.io/docs/quickstart/go.html https://g ...

  2. Dapr集成之GRPC 接口

    Dapr 为本地调用实现 HTTP 和 gRPC API .通常大家第一时间想到的是通过 gRPC 调用 Dapr,更重要的一点是Dapr 也可以通过 gRPC 与应用程序通信. 要做到这一点,原理很 ...

  3. gRPC在C#中的未来属于grpc-dotnet

    作者:Jan Tattermusch grpc-dotnet(Grpc.Net.Client[1]和Grpc.AspNetCore.Server[2] nuget 包)现在是.NET/C#中推荐的 g ...

  4. ASP.NET Core 3.0 使用gRPC

    一.简介 gRPC 是一个由Google开源的,跨语言的,高性能的远程过程调用(RPC)框架.gRPC使客户端和服务端应用程序可以透明地进行通信,并简化了连接系统的构建.它使用HTTP/2作为通信协议 ...

  5. spring boot 配置网关时404错误_Kong中使用grpcweb插件代理grpc服务时遇到的坑

    在大型分布式系统中,有很多的微服务对外提供服务,也会有各种微服务的协议需要集成,比如http,https,grpc的,这时就需要一个API网关提供高性能.高可用的API托管服务,帮助服务的开发者便捷地 ...

  6. grpc双向流 python_gRPC Golang/Python使用

    gRPC Golang/Python使用 以前开发网站都是用http协议,学过TCP/IP协议的人都知道,在传输层TCP的基础上,应用层HTTP就是填充了一定规则的文本. 1.gRPC使用和介绍 工作 ...

  7. Go使用grpc+http打造高性能微服务

    大家可以发现,Go越来越流行,其一是目前云计算领域基本是使用Go作为底层开发语言:其二是随着区块链的火爆,引申出了其背后很多开源项目,很多都是使用Go语言进行开发:其三就是在微服务方面,Go也展示很大 ...

  8. gRPC 在 Go 语言中的安装与简单实践

    现在非常流行微服务,而 RPC 框架是微服务中不可或缺的一环,gRPC 是其中一个非常出色的 RPC 框架,所以借此机会来记录一下 gRPC 在 Go 语言中的安装使用以及运用. PS.刚弄好 WSL ...

  9. gRPC学习之六:gRPC-Gateway集成swagger

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos gRPC学习系列文章链接 在CentOS7部署和设置G ...

最新文章

  1. 从协议入手,剖析OAuth2.0(译 RFC 6749)
  2. 在Windows上运行Spark程序
  3. html5画布画点,在HTML5画布上绘制一个点
  4. LeetCode--palindrome-number回文数
  5. ae可围绕帧拖动放大插件:Drag Zoom Pro for AE mac(兼容M1)
  6. 凭证反过账 金蝶k3_建议收藏!金蝶快捷键操作大全!
  7. CUDA精进之路(四):图像处理——Sobel算子边缘检测
  8. ITIL 4 讲解:服务目录
  9. CIS基线合集-常用版本操作系统、数据库及中间件
  10. android 8 刷机教程视频教程,教你Android 8.0的刷机教程
  11. [verilog] 八位比较器
  12. [js高手之路]html5 canvas动画教程 - 跟着鼠标移动消失的一堆炫彩小球
  13. 什么是零信任?零信任的好处有哪些?
  14. 李飞飞:我怎样走上 AI 研究之路的?
  15. GATK教程 / 体细胞短变异检测 (SNV+InDel)流程概览
  16. 一篇工作调动时的旧文
  17. 15款android设备上的代码编辑器,超级方便!
  18. Simscape/Simulink 电力仿真降压电路 Buck Converter
  19. Mn掺杂CdS量子点|锰掺杂硫化镉量子点|MnS/ZnS/CdS量子点的制备方法图示
  20. 【OpenCV3经典编程100例】(26)2D特征:Shi-Tomasi角点检测goodFeaturesToTrack()函数

热门文章

  1. LINUX下如何重启动网络服务
  2. 使用分析函数进行行列转换
  3. CodeForces - 985F Isomorphic Strings(字符串哈希)
  4. 中石油训练赛 - Racing Gems(最长不下降子序列)
  5. POJ - 3358 Period of an Infinite Binary Expansion(欧拉定理)
  6. [bzoj1547]周末晚会
  7. 1.const关键字.rs
  8. 重载-运算符(感觉怪怪的)
  9. Python识别图片的清晰度
  10. 图文:关于进程与线程,我看过最通俗的解释!