最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

grpc入門Unary模式使用方法示例教程

 更新時間:2023年12月18日 10:29:15   作者:guoqiang  
這篇文章主要為大家介紹了grpc入門Unary模式使用方法示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

gRPC支持類型方法

gRPC支持四種類型的方法,分別是:

  • Unary模式
  • 客戶端流模式
  • 服務(wù)端流模式
  • 雙向流模式

其中最常見的是Unary模式(即一元模式),我們在本章節(jié)僅介紹Unary模式。

Unary模式,也可以稱為“一問一答模式”,客戶端發(fā)送一個請求給服務(wù)端,服務(wù)端返回一個響應(yīng),和一次普通的函數(shù)調(diào)用類似。
示意圖如下:

下面我們來實現(xiàn)一個簡單的Unary接口。

要通過grpc提供接口,可以分為以下三個步驟:

  • 接口定義(.proto文件)。
  • 生成相關(guān)代碼。
  • 服務(wù)端開發(fā)。
  • 客戶端開發(fā)。

接口定義

我們這里實現(xiàn)一個簡單的greet功能,項目目錄結(jié)構(gòu)如下:

proto 存放proto文件。
pb 存放生成的go文件。
server 服務(wù)端代碼。
client 客戶端代碼。
bin 可執(zhí)行文件。

proto文件定義如下(greet.proto):

syntax = "proto3";
package proto;
option go_package = "git.gqnotes.com/guoqiang/grpcexercises/greet/pb";
service GreetService {
  rpc Greet(GreetRequest) returns(GreetResponse) {}
}
message GreetRequest {
  string greeting = 1;
}
message GreetResponse {
  string result = 1;
}

定義Makefile,方便執(zhí)行相關(guān)操作:

tidy:
    go mod tidy
greet-gen:
     protoc -Igreet/proto/ --go_out=./greet --go_opt=module=git.gqnotes.com/guoqiang/grpcexercises/greet --go-grpc_out=./greet --go-grpc_opt=module=git.gqnotes.com/guoqiang/grpcexercises/greet greet/proto/*.proto
greet-build:
     go build -o ./greet/bin/server-osx ./greet/server
     go build -o ./greet/bin/client-osx ./greet/client
.PHONY: tidy greet-gen greet-build

生成相關(guān)代碼

在項目目錄(greet上級目錄)下執(zhí)行如命令:

make greet-gen

執(zhí)行成功,在pb目錄下生成相關(guān)文件。

服務(wù)端開發(fā)

在server目錄下添加兩個文件:

  • main.go,服務(wù)入口文件。
  • Greet.go,Greet方法實現(xiàn)。

代碼如下:

<details>
<summary>main.go</summary>

package main
import (
    "git.gqnotes.com/guoqiang/grpcexercises/greet/pb"
    "google.golang.org/grpc"
    "google.golang.org/grpc/reflection"
    "log"
    "net"
)
func main() {
    // 實現(xiàn)服務(wù)端邏輯,監(jiān)聽5632端口
    lis, err := net.Listen("tcp", ":5632")
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
        return
    }
    s := grpc.NewServer()
    // 注冊服務(wù)
    pb.RegisterGreetServiceServer(s, &Server{})
    reflection.Register(s)
    log.Println("grpc server start")
    if err = s.Serve(lis); err != nil {
        log.Fatalf("failed to serve: %v", err)
        return
    }
}
type Server struct {
    pb.UnimplementedGreetServiceServer
}

</details>

<details>

<summary>Greet.go</summary>

package main
import (
    "context"
    "git.gqnotes.com/guoqiang/grpcexercises/greet/pb"
    "log"
    "time"
)
// Greet greet
func (s *Server) Greet(ctx context.Context, req *pb.GreetRequest) (*pb.GreetResponse, error) {
    log.Printf("Greet function was invoked with %v\n", req)
    result := "Hello " + req.GetGreeting() + ", now time is:" + time.Now().String()
    res := &pb.GreetResponse{
        Result: result,
    }
    return res, nil
}

</details>

客戶端開發(fā)

在client目錄下添加客戶端代碼,有兩個文件:

  • main.go,程序入口文件。
  • Greet.go,具體方法文件。

文件內(nèi)容如下:

<details>

<summary>main.go</summary>

package main
import (
    "git.gqnotes.com/guoqiang/grpcexercises/greet/pb"
    "google.golang.org/grpc"
    "google.golang.org/grpc/credentials/insecure"
    "log"
)
func main() {
    conn, err := grpc.Dial(":5632", grpc.WithTransportCredentials(insecure.NewCredentials()))
    if err != nil {
        log.Fatalf("failed to dial: %v", err)
        return
    }
    defer conn.Close()
    // 實例化客戶端
    client := pb.NewGreetServiceClient(conn)
    // 調(diào)用方法
    Greet(client)
}

</details>

<details>

<summary>Greet.go</summary>

package main
import (
    "context"
    "git.gqnotes.com/guoqiang/grpcexercises/greet/pb"
    "log"
)
func Greet(client pb.GreetServiceClient) {
    response, err := client.Greet(context.Background(), &pb.GreetRequest{
        Greeting: "xiaoming",
    })
    if err != nil {
        log.Fatalf("failed to call Greet: %v", err)
        return
    }
    log.Printf("response:%+v\n", response)
}

</details>

執(zhí)行

在項目目錄下執(zhí)行make tidy,拉取相關(guān)庫,然后執(zhí)行 make greet-build,生成可執(zhí)行文件。

然后在命令行下執(zhí)行如下命令,啟動服務(wù)端程序:

./greet/bin/server-osx

執(zhí)行如下命令,測試客戶端文件:

./greet/bin/client-osx

執(zhí)行結(jié)果如下:

2023/12/02 15:02:26 response:result:"Hello xiaoming now time is:2023-12-02 15:02:26.443767 +0800 CST m=+1268.825308543"

代碼地址 https://git.gqnotes.com/guoqiang/grpcexercises

以上就是grpc入門Unary模式使用方法示例教程的詳細(xì)內(nèi)容,更多關(guān)于grpc Unary模式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang哈希算法實現(xiàn)配置文件的監(jiān)控功能詳解

    Golang哈希算法實現(xiàn)配置文件的監(jiān)控功能詳解

    這篇文章主要介紹了Golang哈希算法實現(xiàn)配置文件的監(jiān)控功能,哈希和加密類似,唯一區(qū)別是哈希是單項的,即哈希后的數(shù)據(jù)無法解密,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-03-03
  • Golang定時任務(wù)框架GoCron的源碼分析

    Golang定時任務(wù)框架GoCron的源碼分析

    本文主要介紹了Golang定時任務(wù)框架GoCron的源碼分析,原生的gocron存在一些問題,如任務(wù)列表維護(hù)不當(dāng)、并發(fā)操作不可預(yù)測等,經(jīng)過改進(jìn)的gocron解決了這些問題,感興趣的可以了解一下
    2025-03-03
  • Gin實現(xiàn)大文件分片上傳與斷點續(xù)傳過程

    Gin實現(xiàn)大文件分片上傳與斷點續(xù)傳過程

    本文介紹了基于Go語言Gin框架實現(xiàn)大文件分片上傳與斷點續(xù)傳的完整流程,首先概述了分片上傳和斷點續(xù)傳的核心原理,接著詳細(xì)描述了服務(wù)端的實現(xiàn),包括全局配置、核心接口和路由注冊等,客戶端部分則提供了簡易示例代碼
    2026-04-04
  • golang int64轉(zhuǎn)int的方法

    golang int64轉(zhuǎn)int的方法

    這篇文章主要介紹了golang int64轉(zhuǎn)int,本文給大家提供兩種方法 ,將 golang int64 轉(zhuǎn)換為golang int,結(jié)合實例代碼給大家分享轉(zhuǎn)換方法,需要的朋友可以參考下
    2023-01-01
  • Go中的gRPC入門教程詳解

    Go中的gRPC入門教程詳解

    本文詳細(xì)講解了Go中的gRPC入門教程,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • Go+Redis實現(xiàn)延遲隊列實操

    Go+Redis實現(xiàn)延遲隊列實操

    這篇文章主要介紹了Go+Redis實現(xiàn)延遲隊列實操,延遲隊列是一種非常使用的數(shù)據(jù)結(jié)構(gòu),我們經(jīng)常有需要延遲推送處理消息的場景,比如延遲60秒發(fā)送短信,延遲30分鐘關(guān)閉訂單,消息消費(fèi)失敗延遲重試等
    2022-09-09
  • Go語言LeetCode500鍵盤行題解示例詳解

    Go語言LeetCode500鍵盤行題解示例詳解

    這篇文章主要為大家介紹了Go語言LeetCode500鍵盤行題解示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • golang標(biāo)準(zhǔn)庫strconv常用方法

    golang標(biāo)準(zhǔn)庫strconv常用方法

    在Go語言中,strconv 包提供了許多用于字符串和基本數(shù)據(jù)類型之間轉(zhuǎn)換的函數(shù),今天通過本文給大家介紹golang標(biāo)準(zhǔn)庫strconv常用方法,感興趣的朋友跟隨小編一起看看吧
    2025-10-10
  • golang遍歷map的方法小結(jié)

    golang遍歷map的方法小結(jié)

    在Go語言中,使用range關(guān)鍵字可以遍歷map,返回鍵和值,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • Go常問的一些面試題匯總(附答案)

    Go常問的一些面試題匯總(附答案)

    通常我們?nèi)ッ嬖嚳隙〞行┎诲e的Golang的面試題目的,所以總結(jié)下,讓其他Golang開發(fā)者也可以查看到,同時也用來檢測自己的能力和提醒自己的不足之處,這篇文章主要給大家介紹了關(guān)于Go常問的一些面試題以及答案的相關(guān)資料,需要的朋友可以參考下
    2023-10-10

最新評論

宿松县| 昌图县| 长春市| 佛山市| 鄄城县| 龙海市| 定襄县| 黔江区| 黔江区| 屏东市| 朝阳县| 龙里县| 邵阳市| 阿图什市| 黄龙县| 新疆| 靖江市| 临桂县| 开江县| 启东市| 那坡县| 永年县| 克什克腾旗| SHOW| 莱芜市| 罗甸县| 蓬安县| 赤城县| 锡林郭勒盟| 环江| 新巴尔虎右旗| 津南区| 沈阳市| 大同县| 教育| 会理县| 临安市| 依安县| 平凉市| 宾川县| 三门峡市|