學習GRPC(一) 簡單實現

Grpc

實現流程圖

資料

使用方法

make run

新建一個proto文件

syntax = "proto3";

package chat;

service ChatService {
    //發送消息
    rpc Send(SendRequest) returns (SendReply){};
}
//發送消息 請求結構體
message SendRequest {
    string content = 1;//發送內容
}
//發送消息 響應結構體
message SendReply {
    string msg = 1;//返回消息
}

GRPC服務端

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

相關文章
相關標籤/搜索