grpc搭建helloworld

grpc搭建helloworld

先安装好protoc的转换工具

go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2

这些会安装到你配置的环境变量的目录下:比如我配置的GOPATH:%USERPROFILE%\go

下载的bin目录就是在我的用户目录的go下,bin中有很多exe程序

编写proto文件

syntax = "proto3";

package hello_grpc;

option go_package = "/hello_grpc";

message Request {
  sint32 id = 1;
}

message Response {
  string content = 1;
}

service HelloService {
  rpc Hello(Request) returns(Response){}
}

我这里选择在根目录下编写生成指令

protoc  --go_out=.\grpc --go-grpc_out=./grpc ./grpc/hello.proto

随后在hello_grpc生成了hello.pb.go和hello_grpc.pb.go

编写服务端

package main

import (
	"awesomeProject/grpc/hello_grpc"
	"context"
	"fmt"
	"google.golang.org/grpc"
	"google.golang.org/grpc/grpclog"
	"net"
)

type HelloService struct {
	hello_grpc.UnimplementedHelloServiceServer
}

func (HelloService) Hello(ctx context.Context, req *hello_grpc.Request) (resp *hello_grpc.Response, err error) {
	fmt.Println(req)
	return &hello_grpc.Response{
		Content: "hello",
	}, nil
}

func main() {
    // 设置监听
	addr := "127.0.0.1:8080"
	lis, err := net.Listen("tcp", addr)
	if err != nil {
		grpclog.Fatalf("failed to listen: %v", err)
	}

	grpcServer := grpc.NewServer()
	helloServer := HelloService{}
    // 将服务注册到grpc中
	hello_grpc.RegisterHelloServiceServer(grpcServer, helloServer)

    // 运行服务
	err = grpcServer.Serve(lis)
}

编写客户端

package main

import (
	"awesomeProject/grpc/hello_grpc"
	"context"
	"fmt"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
	"log"
)

func main() {
    // 与服务端建立连接
	conn, err := grpc.NewClient("localhost:8080", grpc.WithTransportCredentials(insecure.NewCredentials()))
	if err != nil {
		log.Fatalf("did not connect: %v", err)
	}
	defer conn.Close()

    // 用这个连接创建grpc的客户端
	client := hello_grpc.NewHelloServiceClient(conn)
    // 调用grpc服务端的方法
	res, err := client.Hello(context.Background(), &hello_grpc.Request{Id: 666})
	fmt.Println(res, err)
}
posted @ 2025-04-01 15:20  小依昂阳  阅读(33)  评论(0)    收藏  举报