proto文件:
syntax = "proto3";
option go_package = "./hellopb";
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
执行转化命令,转化为go文件
服务器端代码:
package main
import (
"context"
"flag"
"fmt"
pb "gingrpc/hellopb"
"log"
"net"
"google.golang.org/grpc"
)
var (
port = flag.Int("port", 1190, "The server port")
)
type server struct {
pb.UnimplementedGreeterServer
}
func (*server) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) {
fmt.Println(req.GetName())
return &pb.HelloReply{Message: "hello " + req.GetName()}, nil
}
func main() {
flag.Parse()
lis, err := net.Listen("tcp", fmt.Sprintf("0.0.0.0:%d", *port))
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
pb.RegisterGreeterServer(s, &server{})
log.Printf("server listening at %v", lis.Addr())
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
客户端代码:
package main
import (
"context"
"flag"
"log"
"time"
pb "gingrpc/hellopb"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)
const (
defaultName = "world"
)
//*****为放服务端代码的服务器ip
var (
addr = flag.String("addr", "******:1190", "the address to connect to")
name = flag.String("name", defaultName, "Name to greet")
)
func main() {
flag.Parse()
// Set up a connection to the server.
conn, err := grpc.Dial(*addr, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
log.Fatalf("did not connect: %v", err)
}
defer conn.Close()
c := pb.NewGreeterClient(conn)
// Contact the server and print out its response.
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
r, err := c.SayHello(ctx, &pb.HelloRequest{Name: *name})
if err != nil {
log.Fatalf("could not greet: %v", err)
}
log.Printf("Greeting: %s", r.GetMessage())
}
对服务器端代码进行跨平台编译win对linux
进入到服务端代码所在目录下执行
SET CGO_ENABLED=0 set GOARCH=amd64 set GOOS=linux go build main.go
把生成的文件放到服务器上运行

成功运行并放开对应端口

服务端项目运行成功。
执行本地客户端

访问成功
服务端日志:

速度上看,很不理想,没处理任何curd操作,要5秒才能返回数据
浙公网安备 33010602011771号