grpc教程

简介: grpc教程

1.安装proto
下载地址:https://github.com/protocolbuffers/protobuf/releases
2.安装依赖
go get google.golang.org/grpc
3.安装grpc核心库

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
4.proto文件编写

syntax = "proto3"; //这里说明使用版本信息

option go_package = ".;service"; //生成的go文件存放在那个目录那个包中,.代表当前目录生成,service代表生成的go文件的包名称是service

//定义一个服务,在这个服务中需要有一个方法,这个方法可以接受客户端的参数,再返回服务端的响应
//这个方法请求参数为HelloRequest,响应HelloResponse
service SayHello{
rpc SayHello(HelloRequest)returns (HelloResponse){}
}

//这里的message关键字,其实可以当做go中的结构体
// 这里比较特殊的是后面的“赋值”。注意这里的不是赋值,而是在定义这个变量在message中的位置
message HelloRequest{
string requestName = 1;
}

message HelloResponse{
string responseMsg = 1;
}
5.编译命令

protoc --go_out=. .\hello.proto
protoc --go-grpc_out=. .\hello.proto
6.proto字段规则
required:消息体中必填字段,不设置会导致编码异常。在protobuf2中使用,在protobuf3中被删除
optional:消息体中可选字段,protobuf3中没有required,optional等说明关键字,都默认为optional
repeated:消息结构体可重复字段。重复的值的顺序会被保留到go中重复的会被定义为切片

7.服务端代码

package main

import (
"context"
"fmt"
"google.golang.org/grpc"
"net"
pd "study/proto"
)

type server struct {
pd.UnimplementedSayHelloServer
}

func (s server) SayHello(cx context.Context, req pd.HelloRequest) (pd.HelloResponse, error) {
result := req.RequestName + "1"

return &pd.HelloResponse{
    ResponseMsg: result,
}, nil

}

func main() {
//开启端口号
listen, err := net.Listen("tcp", ":8080")
if err != nil {
fmt.Println(err)
}
//创建grpc服务
grpcServer := grpc.NewServer()
//在grpc服务端中去注册我们自己编写的服务
pd.RegisterSayHelloServer(grpcServer, server{})
//启动服务
err = grpcServer.Serve(listen)
if err != nil {
fmt.Println(err)
return
}
}
7.客户端

package main

import (
"context"
"fmt"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
pd "study/proto"
)

func main() {
// 连接server,此处禁止安全传输,没有加密认证
conn, err := grpc.Dial("127.0.0.1:8080", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
return
}

[kod.oydj.net)
[kod.nykh6.com)
[kod.qdljjx.com)
[kod.haimengdi.com)
[kod.haoshuchina.com)
[kod.hbfloor.net)
[kod.gzmiwu.com)
defer conn.Close()
// 建立连接
client := pd.NewSayHelloClient(conn)

//执行调用
resp, err := client.SayHello(context.Background(), &pd.HelloRequest{RequestName: "test"})

fmt.Println(resp)

}

相关文章
|
6月前
|
NoSQL Ubuntu 测试技术
GRPC C++开发环境搭建
GRPC C++开发环境搭建
643 0
|
5月前
|
存储 负载均衡 网络协议
gRPC 的原理 介绍带你从头了解gRPC
gRPC 的原理 介绍带你从头了解gRPC
263 2
|
6月前
|
JSON 缓存 Java
ProtoBuf-gRPC实践
gRPC 是一个高性能、开源、通用的 RPC 框架,基于 HTTP/2 设计,使用 Protocol Buffers(ProtoBuf)作为序列化协议。ProtoBuf 允许定义服务接口和消息类型,编译器会生成客户端和服务器端的代码,简化了跨平台的通信。 **gRPC 学习背景** 1. **为什么要学gRPC**:提高网络通信效率,支持多平台、多语言,提供高效序列化和反序列化,以及可靠的安全性和流控。 2. **RPC是什么**:远程过程调用,允许一个程序调用另一个不在同一设备上的程序。 3. **网络库收益分析**:gRPC 提供高效、安全、易用的网
346 0
|
6月前
|
XML Go 开发工具
RPC简介和grpc的使用
RPC简介和grpc的使用
98 0
|
负载均衡
gRPC源码分析(二):从官网文档看gRPC的特性
在第一部分,我们学习了gRPC的基本调用过程,这样我们对全局层面有了一定了解。接下来,我们将结合官方文档,继续深入学习、探索下去。
83 0
|
Java 编译器 API
gRPC 初探与简单使用
gRPC 初探与简单使用
66 0
|
负载均衡 安全 Cloud Native
2023-5-15-gRpc框架学习
2023-5-15-gRpc框架学习
152 0
|
Cloud Native 物联网 编译器
gRPC(三)基础:gRPC快速入门
Protobuf 是 Google 的序列化/反序列化协议,可以轻松定义服务和自动生成客户端库。gRPC 使用此协议作为其接口定义语言 (IDL) 和序列化工具集。
390 0
gRPC(三)基础:gRPC快速入门
|
JSON 网络协议 Dubbo
gRPC(一)入门:什么是RPC?
RPC是一种方法,而HTTP是一种协议。两者都常用于实现服务,在这个层面最本质的区别是RPC服务主要工作在TCP协议之上(也可以在HTTP协议),而HTTP服务工作在HTTP协议之上。由于HTTP协议基于TCP协议,所以RPC服务天然比HTTP更轻量,效率更胜一筹。
420 0
gRPC(一)入门:什么是RPC?
|
Java Go Maven
一个简单的案例入门 gRPC
一个简单的案例入门 gRPC