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)
}