iT邦幫忙

2021 iThome 鐵人賽

DAY 29
0
Modern Web

golang後端入門分享系列 第 29

Day29-Go gRPC(下)

前言

在上一篇,我們介紹了 gRPC 以及建例 proto 檔,今天要來介紹如何使用 gRPC 來建立一套 Server,以及在 Client 端如何去呼叫 Server 端。

gRPC Server

先帶來如何建立一個 Server 端,一樣先建立好 proto 檔,可以參考上一篇:

syntax = "proto3";
 
option go_package = "./;student";
 
package student;
 
service StudentServer { 
   rpc GetStudentData (GetStudentDataReq) returns (GetStudentDataRes) {}
}
 
message GetStudentDataReq { 
   int64  student_id = 1;
   string class = 2;
}
 
message GetStudentDataRes { 
   string student_name = 1;
   int64 student_heigh = 2;
   int64 student_weight = 3;
}

我們要起的服務,包括一隻 GetStudentData API,接著就要建立 main function,將服務起起來:

package main
 
import (
   "fmt"
   "net"
 
   "google.golang.org/grpc"
   "google.golang.org/grpc/reflection"
 
   "sever/student"
)

type studentServer struct{}
 
func main() {
   // 設定要監聽的 port
   lis, err := net.Listen("tcp", fmt.Sprintf("localhost:%d", 3000))
   if err != nil {
       fmt.Println("監聽失敗: ", err)
   }
 
   // 使用 gRPC 的 NewServer meethod 來建立 gRPC Server
   grpcServer := grpc.NewServer()
   student.RegisterStudentServerServer(grpcServer, &studentServer{})
   // 在 gRPC 伺服器上註冊反射服務。
   reflection.Register(grpcServer)
 
   // 啟動服務。
   if err := grpcServer.Serve(lis); err != nil {
       fmt.Println("無法提供服務:", err)
   }
}

如此一來,就可以起動這個 Server!

gRPC Client

在 Client 端,要呼叫服務端,作法很簡單,直接看程式碼:

var client pb.StudentServerClient
 
func main() {
 
   // 建立連線
   conn, err := grpc.Dial("localhost:8787", grpc.WithInsecure())
   if err != nil {
       fmt.Println("連線失敗:", err)
   }
 
   // 最後關閉練線
   defer conn.Close()
 
   // 用 proto 提供的 NewStudentServerClient,來建立 client
   client = pb.NewStudentServerClient(conn)
  
   GetStudent(1, "A")
}
 
func GetStudent(studentId int64, class string) {
   res, err := client.GetStudentData(context.Background(),
       &pb.GetStudentDataReq{
               StudentId: studentId,
               Class:     class,
           })
   if err != nil {
       log.Fatalf("GetStudentData error: %v", err)
   }
   fmt.Println(res)//執行結果
}

這樣將可以建立 Client 端連線了,使用 Server 端提供的服務

結語

今天帶來如何在 Go 語言中使用 gRPC,建出一套 Server 和 Client,使用起來不會太過複雜,如果你是想以 Go 語言來開發網站,那 gRPC 是你必須學的一大課題,點對點的即時通訊,使得他非常適合於微服務,會帶來非常高的效率。
感謝各位讀者今天的閱讀,希望對你有幫助!


上一篇
Day28-Go gRPC(上)
下一篇
Day30- Final Go
系列文
golang後端入門分享30

尚未有邦友留言

立即登入留言