grpc和proto快速入门
·
这篇文章假设你已经装好proto需要的三个插件
网上的教程多多少少都有点问题,研究了半天终于跑通了,这里记录下
1 .先建个空的go module项目
2. 新建文件夹pb,新建hello.proto
//定义proto版本
syntax = "proto3";
//定义包名
package pb;
//定义生成的go文件的包名"路径;别名"
option go_package = "./pb";
//类似于go的结构体
message Req {
string message = 1;
}
message Res {
string message = 1;
}
//定义服务器
service SayHi{
//定义rpc服务
rpc Hello (Req) returns (Res);
}
终端进到pb文件夹下运行
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative ./hello.proto
会生成两文件
3. 新建服务端文件server/server.go
package main
import (
"awesomeProject/pb"
"context"
"log"
"net"
"google.golang.org/grpc"
)
//定义一个服务结构体
type Server struct {
pb.UnimplementedSayHiServer
}
//定义服务方法
func (s *Server) Hello(c context.Context, in *pb.Req) (*pb.Res, error) {
log.Println(in.Message)
return &pb.Res{Message: "服务器发送的信息"}, nil
}
func main() {
//监听端口
listen, err := net.Listen("tcp", ":9999")
if err != nil {
log.Println(err)
return
}
//注册grpc服务
s := grpc.NewServer()
//注册服务方法
pb.RegisterSayHiServer(s, &Server{})
//开启grpc服务
s.Serve(listen)
}
运行起来
4.新建客户端文件client/clinet.gp
package main
import (
"awesomeProject/pb"
"context"
"log"
"google.golang.org/grpc"
)
func main() {
//建立连接
conn, err := grpc.Dial("127.0.0.1:9999", grpc.WithInsecure())
if err != nil {
log.Println(err)
return
}
defer conn.Close()
//定义相应方法的客户端
c := pb.NewSayHiClient(conn)
//调用相应方法
res, err := c.Hello(context.Background(), &pb.Req{Message: "客户端发送的信息"})
if err != nil {
log.Println(err)
return
}
log.Println(res)
}
运行起来
总结
脑子没转过弯研究了很久客户端怎么调用的,其实就是定义好你的porto文件后发给其他客户端,他们用生成相应的pb文件后,就可以本地调用方法的形式来调用我们的接口了,活久见
更多推荐


所有评论(0)