写点什么

go 实现 grpc- 快速开始

  • 2024-11-05
    四川
  • 本文字数:1403 字

    阅读完需:约 5 分钟

go实现grpc-快速开始

好的,让我们开始吧。


gRPC 是一种高性能、开源和通用的 RPC 框架,Google 开发并开源,它主要面向移动应用和 HTTP/2 设计,特别适合构建新的微服务。gRPC 可以基于 protobuf 进行服务的定义,这种方式能够让我们定义一种强类型的服务接口,同时 protobuf 也提供了丰富的插件来生成客户端和服务端代码。


首先,你需要安装 Go 和 gRPC。在 Go 的官方网站下载并安装 Go。然后使用以下命令安装 gRPC 和 protobuf:


go get -u google.golang.org/grpcgo get -u github.com/golang/protobuf/protoc-gen-go​然后,我们需要创建一个.proto 文件来定义我们的服务。这个文件是使用 protobuf 语言编写的,可以定义服务和消息类型。例如,我们可以创建一个 helloworld.proto 文件,内容如下:


syntax = "proto3";


package helloworld;


service Greeter {rpc SayHello (HelloRequest) returns (HelloReply) {}}


message HelloRequest {string name = 1;}


message HelloReply {string message = 1;}​这个文件定义了一个 Greeter 服务,它有一个 SayHello 方法,接收一个 HelloRequest 消息并返回一个 HelloReply 消息。


然后,我们需要使用 protobuf 的编译器 protoc 来生成 Go 代码。运行以下命令:


protoc --go_out=plugins=grpc:. helloworld.proto​这个命令会生成 helloworld.pb.go 文件,这个文件包含了我们服务的所有代码。


现在,我们可以开始编写服务端代码了。创建一个 main.go 文件,内容如下:


package main


import ("context""log""net"


pb "path/to/helloworld"
"google.golang.org/grpc"
复制代码


)


type server struct{}


func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {return &pb.HelloReply{Message: "Hello " + in.Name}, 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)}}​这段代码定义了一个 server 类型,实现了 Greeter 服务的 SayHello 方法。然后在 main 函数中,我们创建了一个 gRPC 服务器实例,注册了 Greeter 服务,并开始监听和服务。


创建客户端的代码也很简单,创建一个 main.go 文件,内容如下:


package main


import ("context""log""time"


pb "path/to/helloworld"
"google.golang.org/grpc"
复制代码


)


func main() {conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure())if err != nil {log.Fatalf("did not connect: %v", err)}defer conn.Close()c := pb.NewGreeterClient(conn)


ctx, cancel := context.WithTimeout(context.Background(), time.Second)defer cancel()r, err := c.SayHello(ctx, &pb.HelloRequest{Name: "world"})if err != nil {  log.Fatalf("could not greet: %v", err)}log.Printf("Greeting: %s", r.GetMessage())
复制代码


}​这段代码创建了一个与服务器的连接,然后创建了一个 Greeter 服务的客户端。然后,我们调用 SayHello 方法,发送一个 HelloRequest 消息,并打印出返回的消息。


以上就是使用 Go 实现 gRPC 的基础流程,希望对你有所帮助。


蓝易云-五网 CN2 服务器【点我购买】


蓝易云采用 KVM 高性能架构,稳定可靠,安全无忧!蓝易云服务器真实 CN2 回国线路,不伪造,只做高质量海外服务器。海外免备案云服务器链接:www.tsyvps.com


蓝易云香港五网 CN2 GIA/GT 精品网络服务器。拒绝绕路,拒绝不稳定。

用户头像

百度搜索:蓝易云 2023-07-05 加入

香港五网CN2免备案服务器

评论

发布
暂无评论
go实现grpc-快速开始_百度搜索:蓝易云_InfoQ写作社区