GoLang:gRPC协议的介绍以及详细教程,从Protocol开始

目录

​编辑

引言

一、安装相关Go语言库和相关工具

1. 安装Go

2. 安装Protocol Buffers Compiler

2.1 Windows

2.1.1 下载

2.1.2 解压

2.1.3 环境变量

2. macOS

3. Linux

4. 验证安装

3. 安装gRPC-Go

4. 安装Protocol Buffers的Go插件

二、定义服务

三、生成Go语言代码

四、实现服务端

1. 实现Proto定义的服务接口。

2. 启动gRPC服务器监听端口,注册服务。

五、实现客户端

1. 连接到gRPC服务器。

2. 调用服务方法。

六、测试


引言

gRPC(Google Remote Procedure Call)是一个由Google开发的高性能、开源RPC(远程过程调用)框架。它基于HTTP/2进行数据传输,使用ProtoBuf(Protocol Buffers)作为接口描述语言,支持多种编程语言,如Java、Go、C#等,适用于不同语言环境。gRPC的显著特点包括其高效的通信性能,支持双向流、多路复用和二进制传输,以及集成的安全机制,如SSL/TLS。这些特性使gRPC特别适合用于构建高性能的分布式系统和微服务架构中的服务间通信,尤其在需要处理大量数据和高吞吐量的场景中表现出色。

一、安装相关Go语言库和相关工具

1. 安装Go

确保安装了最新版本的Go。All releases - The Go Programming Language

2. 安装Protocol Buffers Compiler

2.1 Windows

2.1.1 下载

https://github.com/protocolbuffers/protobuf/releases/download/v25.1/protobuf-25.1.zip

下载适用于Windows的protoc-<version>.zip文件。

如果上面链接失效请访问官网地址:https://github.com/protocolbuffers/protobuf/releases

2.1.2 解压

解压下载的文件到一个你选择的目录。

2.1.3 环境变量

将解压后的bin目录添加到你的环境变量PATH中。这样可以从任意位置运行protoc

  • 右击“我的电脑”或“此电脑”,选择“属性”。
  • 点击“高级系统设置”,然后点击“环境变量”。
  • 在“系统变量”下,找到并选择PATH,点击“编辑”。
  • 添加解压后的bin目录的路径,点击“确定”。

2. macOS

在 macOS 上,你可以使用 Homebrew 来安装 protoc:

brew install protobuf

3. Linux

ProtoBuf编译器用于编译.proto文件。

对于大多数基于Debian的Linux发行版(如Ubuntu),你可以使用以下命令安装:

sudo apt-get install protobuf-compiler

 对于基于RPM的发行版(如Fedora、CentOS),你可以使用:

sudo dnf install protobuf-compiler

4. 验证安装

安装完成后,你可以在命令行中运行以下命令来验证安装:

protoc --version

3. 安装gRPC-Go

通过go get安装gRPC的Go实现的包。

go get -u google.golang.org/grpc

4. 安装Protocol Buffers的Go插件

go get -u google.golang.org/protobuf/cmd/protoc-gen-go \google.golang.org/grpc/cmd/protoc-gen-go-grpc

二、定义服务

创建Proto文件:定义服务接口和消息格式。例如,创建helloworld.proto

syntax = "proto3";package helloworld;service Greeter {rpc SayHello (HelloRequest) returns (HelloReply) {}
}message HelloRequest {string name = 1;
}message HelloReply {string message = 1;
}

三、生成Go语言代码

使用ProtoBuf编译器生成Go代码。

protoc --go_out=. --go_opt=paths=source_relative \--go-grpc_out=. --go-grpc_opt=paths=source_relative \helloworld/helloworld.proto

四、实现服务端

1. 实现Proto定义的服务接口

2. 启动gRPC服务器监听端口,注册服务。

package mainimport ("context""log""net""google.golang.org/grpc"pb "path/to/your/service"
)type server struct {pb.UnimplementedGreeterServer
}func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {return &pb.HelloReply{Message: "Hello " + in.GetName()}, nil
}func main() {lis, err := net.Listen("tcp", ":50051")if err != nil {log.Fatalf("failed to listen: %v", err)}s := grpc.NewServer()pb.RegisterGreeterServer(s, &server{})if err := s.Serve(lis); err != nil {log.Fatalf("failed to serve: %v", err)}
}

五、实现客户端

1. 连接到gRPC服务器

2. 调用服务方法

package mainimport ("context""log""time""google.golang.org/grpc"pb "path/to/your/service"
)func main() {conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure(), grpc.WithBlock())if err != nil {log.Fatalf("did not connect: %v", err)}defer conn.Close()c := pb.NewGreeterClient(conn)name := "world"ctx, cancel := context.WithTimeout(context.Background(), time.Second)defer cancel()r, err := c.SayHello(ctx, &pb.HelloRequest{Name: name})if err != nil {log.Fatalf("could not greet: %v", err)}log.Printf("Greeting: %s", r.GetMessage())
}

六、测试

运行服务器和客户端,确保它们能够相互通信。

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

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

相关文章

java SSM问卷调查系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM问卷调查管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代 码和数据库&#xff0c;系统主要采…

数据恢复与并发控制例题

例1: (1)重做&#xff08;REDO&#xff09;&#xff1a;T1,T2,T3; 撤销&#xff08;UNDO&#xff09;&#xff1a;T4。 (2)重做&#xff1a;T1,T2&#xff1b; 撤销&#xff1a;T3。 (3)重做&#xff1a;T1; 撤销&#xff1a;T2,T3. (4)重做&#xff1a;T1&#xff1b; 撤销…

SpringMVC通用后台管理系统源码

整体的SSM后台管理框架功能已经初具雏形&#xff0c;前端界面风格采用了结构简单、 性能优良、页面美观大的Layui页面展示框架 数据库支持了SQLserver,只需修改配置文件即可实现数据库之间的转换。 系统工具中加入了定时任务管理和cron生成器&#xff0c;轻松实现系统调度问…

视觉检测不合格品剔除FC(Smart PLC简单状态机编程应用)

视觉系统检测到不合格产品后&#xff0c;往往都需要控制我们的剔除电磁阀吹气剔除不合格产品&#xff0c;三菱PLC里的推荐编程方法&#xff0c;可以参考下面的链接文章&#xff1a; https://rxxw-control.blog.csdn.net/article/details/125027866https://rxxw-control.blog.c…

Mongodb使用指定索引删除数据

回顾Mongodb删除语法 db.collection.deleteMany(<filter>,{writeConcern: <document>,collation: <document>,hint: <document|string>} ) 删除语法中&#xff0c;除了指定过滤器外&#xff0c;还可以指定写入策略&#xff0c;字符序和使用的索引。 …

使用.Net nanoFramework为ESP32进行蓝牙配网

通过前面的介绍&#xff0c;我们已经学会了如何使用 .NET nanoFramework 为 ESP32 设备连接 Wi-Fi 网络。然而&#xff0c;在实际的物联网环境中&#xff0c;我们往往需要使用更便捷的式来满足配网需求。这篇文章将带你了解一些常见的配网方案&#xff0c;并以 ESP32 为例&…

Spring Boot 整合 MinIO自建对象存储服务

GitHub 地址&#xff1a;GitHub - minio/minio: The Object Store for AI Data Infrastructure 另外&#xff0c;MinIO 可以用来作为云原生应用的主要存储服务&#xff0c;因为云原生应用往往需要更高的吞吐量和更低的延迟&#xff0c;而这些都是 MinIO 的优势。安装过程跳过。…

AI看图识熊实战(一)

使用ONNX Runtime封装onnx模型并推理 进行这一步之前&#xff0c;请确保已正确安装配置了Visual Studio 2017 和 C#开发环境。 项目的代码也可以在这里找到&#xff0c;下面的步骤是带着大家从头到尾做一遍。 界面设计 创建Windows窗体应用(.NET Framework)项目&#xff0c…

数字化工厂产品推荐 带OPC UA的分布式IO模块

背景 近年来&#xff0c;为了提升在全球范围内的竞争力&#xff0c;制造企业希望自己工厂的机器之间协同性更强&#xff0c;自动化设备采集到的数据能够发挥更大的价值&#xff0c;越来越多的传统型工业制造企业开始加入数字化工厂建设的行列&#xff0c;实现智能制造。 数字化…

基于SSM的《数据库系统原理》课程平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

用js玩一玩猜数字游戏

需求&#xff1a; 1. 生成随机的数字 0 到 20 2. 只能猜 5 次&#xff0c; 5 次机会用完提示 这都猜不到 3. 猜对了&#xff0c; 就提示 恭喜猜对拉 4. 猜小了&#xff0c; 您猜的数字小了 5. 猜大了&#xff0c; 就提示用户 您猜的数字大了 <script>// 1. 生成随机…

mysql之视图mysql连接案例索引

文章目录 一、视图1.1 含义1.2 操作1.2.1 创建视图1.2.2 视图的修改1.2.3 删除视图1.2.4 查看视图 二、连接案例01)查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数02)查询同时存在" 01 "课程和" 02 "课程的情况03&#xff0…