make run
syntax = "proto3"; package chat; service ChatService { //發送消息 rpc Send(SendRequest) returns (SendReply){}; } //發送消息 請求結構體 message SendRequest { string content = 1;//發送內容 } //發送消息 響應結構體 message SendReply { string msg = 1;//返回消息 }
package main import ( "context" "github.com/yezihack/grpc/simple/server/proto" "google.golang.org/grpc" "log" "net" "os" ) var ( port = ":8008" ) func main() { log.SetOutput(os.Stdout) //新建一個tcp監聽 lis, err := net.Listen("tcp", port) if err != nil { log.Fatalln(err) } //起一個服務 s := grpc.NewServer() // 註冊反射服務 這個服務是CLI使用的 跟服務自己沒有關係 chat.RegisterChatServiceServer(s, &Chats{}) log.Printf("server port %s start...\n", port) //啓動服務 if err = s.Serve(lis); err != nil { log.Fatalln(err) } } //新建一個結構體,實現proto裏定義的方法 type Chats struct { } //實現proto方法 func (c *Chats) Send(ctx context.Context, in *chat.SendRequest) (*chat.SendReply, error) { out := chat.SendReply{ Msg: "hello " + in.Content, } return &out, nil }
package main import ( "context" "github.com/yezihack/grpc/simple/server/proto" "google.golang.org/grpc" "log" "os" ) var ( addrees = "localhost:8008" ) func main() { log.SetOutput(os.Stdout) conn, err := grpc.Dial(addrees, grpc.WithInsecure()) if err != nil { log.Fatalln(err) } client := chat.NewChatServiceClient(conn) req := chat.SendRequest{ Content: "world 2019", } reply, err := client.Send(context.Background(), &req) if err != nil { log.Fatalln(err) } log.Println(reply.Msg) }
代碼歸檔: https://github.com/yezihack/grpcgit