协议
hello.proto 文件:
syntax = "proto3";
package hello;
message HelloRequest {
string greeting = 1;
}
message HelloResponse {
string reply = 1;
repeated int32 number = 4;
}
service HelloService {
rpc SayHello(HelloRequest) returns (HelloResponse) {}
}
服务端代码:
// test_grpc project test_grpc.go package main import ( "flag" "fmt" "log" "net" pb "proto" context "golang.org/x/net/context" "google.golang.org/grpc" ) type server struct{} func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) { //fmt.Println("hello") if in.Greeting == "helloworld" { return &pb.HelloResponse{in.Greeting, []int32{1, 2}}, nil } else { return &pb.HelloResponse{"fjgui", []int32{666}}, nil } //return &pb.HelloResponse{"fjgui", []int32{1, 2}}, nil } func main() { port := flag.Int("port", 8000, "the server") lis, err := net.Listen("tcp", fmt.Sprintf("127.0.0.1:%d", *port)) if err != nil { log.Fatalf("failed to listen: %v", err) } s := grpc.NewServer() pb.RegisterHelloServiceServer(s, &server{}) s.Serve(lis) }
客户端代码:
// test_grpc_client project test_grpc_client.go
package main
import (
"flag"
"fmt"
"log"
"os"
pb "proto"
context "golang.org/x/net/context"
"google.golang.org/grpc"
)
func main() {
address := flag.String("addressfjgui", "127.0.0.1:8000", "The server address in the format of host:port")
conn, err := grpc.Dial(*address, grpc.WithInsecure())
if err != nil {
log.Fatalf("did not connect:%v", err)
}
defer conn.Close()
c := pb.NewHelloServiceClient(conn)
req_greeting := "helloworld"
if len(os.Args) > 1 {
req_greeting = os.Args[1]
}
r, err := c.SayHello(context.Background(), &pb.HelloRequest{req_greeting})
fmt.Println(req_greeting)
if err != nil {
log.Fatalf("could not greet: %v", err)
}
log.Printf("Greeting: %v", r.Reply)
log.Printf("Greeting: %v", r.Number)
}