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)
}
                    
                
                
            
        
浙公网安备 33010602011771号