grpc使用教程

编程入门 行业动态 更新时间:2024-10-20 00:43:04

grpc使用<a href=https://www.elefans.com/category/jswz/34/1771193.html style=教程"/>

grpc使用教程

准备

1,安装grpc
go get -u google.golang/grpc2, 安装go语言protobuf生成器protoc-gen-go
go get -u google.golang/protobuf/cmd/protoc-gen-go注意: 将GOPATH下的bin目录配置在环境变量中否则会找不到命令

编写proto文件

# server/proto/test.proto 文件
syntax = "proto3";package test;
option go_package = "../proto";service Greeter {rpc SayHello (HelloRequest) returns (HelloResponse) {}
}message HelloRequest {string name = 1;
}message HelloResponse {string message = 1;
}

生成protobuf

cd server/proto
protoc --proto_path=. --go_out=plugins=grpc:. *

编写服务端程序

# server/main.go
package mainimport ("context""google.golang/grpc""log""net"pb "server/proto"
)type server struct {
}func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) {return &pb.HelloResponse{Message: "hello " + in.Name,}, nil
}func main() {listen, err := net.Listen("tcp", ":8080")if err != nil {log.Fatal("net.Listen err", err)}s := grpc.NewServer()pb.RegisterGreeterServer(s, &server{})if err = s.Serve(listen); err != nil {log.Fatal("s.Serve err", err)}
}

编写客户端

# 先将server/proto 目录复制到 client/proto# client/main.go
package mainimport (pb "client/proto""context""google.golang/grpc""google.golang/grpc/credentials/insecure""log""net""net/http"
)type server struct {httpServer http.Server
}func (s *server) ServeHTTP(w http.ResponseWriter, r *http.Request) {if r.URL.Path == "/sayHello" {message := sayHello(r.Form.Get("name"))w.WriteHeader(http.StatusOK)w.Header().Set("Content-Type", "text/html")w.Write([]byte("<h1>" + message + "</h1>"))}
}func sayHello(name string) string {conn, err := grpc.Dial("127.0.0.1:8080", grpc.WithTransportCredentials(insecure.NewCredentials()))if err != nil {log.Fatal("连接失败:", err)}defer conn.Close()client := pb.NewGreeterClient(conn)resp, err := client.SayHello(context.Background(), &pb.HelloRequest{Name: name})if err != nil {log.Fatal("调用失败:", err)}return resp.GetMessage()
}func main() {listen, err := net.Listen("tcp", ":80")if err != nil {log.Fatal("net.Listen err", err)}s := &server{}s.httpServer.Handler = sif err = s.httpServer.Serve(listen); err != nil {log.Fatal("httpServer.Serve err", err)}
}

验证

通过postman请求 http://127.0.0.1/sayHello 接口, 参数 name 为jack, 看到响应了 <h1>hello </h1>

更多推荐

grpc使用教程

本文发布于:2023-11-15 19:35:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1605135.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:教程   grpc

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!