栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

rpc、grpc、protobuf使用(macos)

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

rpc、grpc、protobuf使用(macos)

1、rpc 2、grpc 官网

grpc官网——go:https://www.grpc.io/docs/languages/go/quickstart/

安装
go get -u -v google.goland.org/grpc
添加rpc服务
  • 在.proto文件中
service 服务名 {
	rpc 函数名(参数:消息体) returns(返回值:消息);
}
message People {
	string name = 1;
}
message Student {
	int32 age = 2;
}
例:
service hello {
	rpc Helloworld(People) returns(Student);
}

protobuf编译期间默认不编译服务;要想编译服务需要使用grpc,编译指令为

protoc *.proto --go_out=plugins=grpc:./ 
clien和server通信demo
  • .proto文件
syntax = "proto3";

package pb;

option go_package ="./";

message Teacher {
  int32 age = 1;
  string name = 2;
}

service SayName {
  rpc SayHello(Teacher) returns (Teacher);
}
  • 生成.pb.go文件
protoc *.proto --go_out=plugins=:./
  • 服务端grpc
package main

import (
	"IHome/day01/pb"
	"context"
	"fmt"
	"google.golang.org/grpc"
	"net"
)

//2.1 定义类
type Children struct {
	
}

//2.2 按接口绑定类方法
func (this *Children) SayHello(ctx context.Context, t *pb.Teacher) (*pb.Teacher, error) {
	t.Name += " is sleeping"
	return t, nil
}

func main()  {
	//1 初始化grpc对象
	grpcServer := grpc.NewServer()

	//2 注册服务
	pb.RegisterSayNameServer(grpcServer, new(Children))

	//3 设置监听,指定ip、port
	listener, err := net.Listen("tcp", "127.0.0.1:8080")
	if err != nil {
		fmt.Println("net.listen : ", err)
		return
	}
	defer listener.Close()

	//4 启动服务
	grpcServer.Serve(listener)
}
  • 客户端grpc
package main

import (
	"IHome/day01/pb"
	"context"
	"fmt"
	"google.golang.org/grpc"
)

func main()  {
	//1 连接grpc服务
	grpcConn, err := grpc.Dial("127.0.0.1:8080", grpc.WithInsecure())
	if err != nil {
		fmt.Println("grpc.Dial : ", err)
		return
	}
	defer grpcConn.Close()

	//2 初始化grpc客户端
	grpcClient := pb.NewSayNameClient(grpcConn)

	//创建并初始化Teacher对象
	var teacher pb.Teacher
	teacher.Name = "jmm"
	teacher.Age = 23

	//3 调用远程服务
	t, err := grpcClient.SayHello(context.TODO(), &teacher)
	if err != nil {
		fmt.Println("grpc.Dial : ", err)
		return
	}
	fmt.Println(t)
}
遇到的问题
  • grpc "google.golang.org/grpc"报红
go get google.golang.org/grpc
3、protobuf 官网

protobuf官网——go:https://developers.google.cn/protocol-buffers/docs/proto3

安装protobuf
  • 官网下载protobuf https://github.com/protocolbuffers/protobuf/releases/
  • 下载后解压,命令行进入到文件夹下

    输入./configure --prefix=/usr/local/protobuf
  • 接着输入
make
make check
sudo make install
  • 验证安装是否成功
which protoc
protoc --version

goland中安装使用protobuf

编写的注意事项
  • message成员编号,可以不从1开始,但不能重复
  • 可以使用message嵌套
  • 定义数组、切片使用 repeated 关键字
  • 可以使用枚举 enum
  • 可以使用联合体 oneof
编译protobuf
protoc *.proto --go_out=./ 
遇到的问题
  • protoc-gen-go: unable to determine Go import path for
    需要在 .proto 中指定绝对路径
  • protoc-gen-go-grpc: program not found or is not executable
go get -u google.golang.org/protobuf/cmd/protoc-gen-go
go install google.golang.org/protobuf/cmd/protoc-gen-go
go get -u google.golang.org/grpc/cmd/protoc-gen-go-grpc
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906358.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号