最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

GRPC教程 2- gRPC下載以及入門gRPC

2023-04-09 18:56 作者:罹心  | 我要投稿

推薦食用視頻喔

視頻地址:https://www.bilibili.com/video/BV1tM411N7cZ/

本篇文章我們開始學習gRPC,我們之前學到了RPC(遠程過程調用),那么gRPC是什么呢?gRPC是Google開源的現代高性能RPC框架,能夠運行在任何環(huán)境中,使用HTTP2作為傳輸協議。


gRPC與RPC一樣,可以像調用本地方法一樣去調用另一個進程上的服務,這可以幫助你很輕松的創(chuàng)建微服務程序。gRPC只是定義類型和遠程服務帶有的參數和返回類型,我們需要在gRPC服務端程序中定義服務的邏輯,在客戶端調用和服務器端相同的方法。


## 安裝gRPC


1. 安裝Protocol? Buffers

```shell

https://github.com/google/protobuf/releases

```

下載

```

protoc-22.2-linux-x86_64.zip

```

2. 解壓縮文件

```

unzip protoc-22.2-linux-x86_64.zip -d protoc

```

將 protoc下的 bin目錄下的 `protoc`文件加入到`$GOPATH/bin`目錄下, 然后將include目錄 放到`$GOPATH` 目錄下,以便于我們編寫proto文件時,可以找到對應的文件。


3. 下載protobuf go語言的插件

進入 https://grpc.io, 點擊 go 進入https://grpc.io/docs/languages/go/quickstart/


開始下載go的插件


```

go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28 // 生成 .pb.go文件

go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2 // 生成 _grpc.pb.go 文件

$ export PATH="$PATH:$(go env GOPATH)/bin"

```

go語言下的protobuf 環(huán)境下載好了


4. 開始編寫代碼

首先隨便選個目錄 創(chuàng)建兩個文件夾,client和server,這兩個文件夾將成為我們調用gRPC的客戶端和服務端。

我們在client和server兩個文件夾中分別mod init一下,并且創(chuàng)建對應的調用函數文件

```

// server

go mod int server


// client

go mod int client


```

接下來在這兩個目錄下都創(chuàng)建一個proto文件夾。

首先然后在server/proto文件夾下創(chuàng)建一個hello.proto,在client/proto文件夾下創(chuàng)建一個hello.proto文件。

```

// server/proto/hello.proto

syntax = "proto3";


option go_package = "server/proto";


package proto;


// Hello Request

message HelloReq {

? string name = 1;

}


// Hello Response

message HelloResp {

? string msg = 1;

}


service Greetering {

? rpc Hello (HelloReq) returns (HelloResp);

}


// client/proto/hello.proto

syntax = "proto3";


option go_package = "client/proto";


package proto;


// Hello Request

message HelloReq {

? string name = 1;

}


// Hello Response

message HelloResp {

? string msg = 1;

}


service Greetering {

? rpc Hello (HelloReq) returns (HelloResp);

}

```

接著,你需要對這兩個.proto 通過我們剛剛下載的的protoc工具和插件去生成相應的go代碼。

```

protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt=paths=source_relative server/proto/hello.proto client/proto.hello.proto

```

最后分別在兩個目錄下執(zhí)行`go mod tidy`,然后目錄的結構就如下所示

```

.

├── client

│? ?├── client.go

│? ?├── go.mod

│? ?├── go.sum

│? ?└── proto

│? ? ? ?├── hello_grpc.pb.go

│? ? ? ?├── hello.pb.go

│? ? ? ?└── hello.proto

└── server

? ? ├── go.mod

? ? ├── go.sum

? ? ├── proto

? ? │? ?├── hello_grpc.pb.go

? ? │? ?├── hello.pb.go

? ? │? ?└── hello.proto

? ? └── server.go

```


隨后,我們開始寫對應的邏輯

```

// server/server.go

package main


import (

"context"

"fmt"

"log"

"net"

"os"

"server/proto"


"google.golang.org/grpc"

)


type server struct {

proto.UnimplementedGreeteringServer

}


func (s *server) Hello(ctx context.Context, req *proto.HelloReq) (*proto.HelloResp, error) {

msg := fmt.Sprintf("Hello, %s", req.GetName())

return &proto.HelloResp{

Msg: msg,

}, nil

}


func main() {


fmt.Println("os getpid: ", os.Getpid())


l, err := net.Listen("tcp", ":7890")

if err != nil {

log.Fatal(err)

}

defer l.Close()


s := grpc.NewServer()

proto.RegisterGreeteringServer(s, &server{})

err = s.Serve(l)

if err != nil {

log.Fatal(err)

return

}

}

```


```

// client/client.go

package main


import (

"client/proto"

"context"

"fmt"

"log"

"os"

"time"


"google.golang.org/grpc"

"google.golang.org/grpc/credentials/insecure"

)


func main() {


fmt.Println("os getpid: ", os.Getpid())


conn, err := grpc.Dial("127.0.0.1:7890", grpc.WithTransportCredentials(insecure.NewCredentials()))

if err != nil {

log.Fatal(err)

}

defer conn.Close()


client := proto.NewGreeteringClient(conn)

ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)

defer cancel()

resp, err := client.Hello(ctx, &proto.HelloReq{Name: "Cheng Long"})

if err != nil {

log.Fatal(err)

}

log.Println(resp.GetMsg())

}

```

我們在`server`文件夾下執(zhí)行`go run server.go`

在`client`文件夾下執(zhí)行`go run client.go`就可以輸出

```

Hello,Cheng Long

```

我們就成功執(zhí)行了gRPC代碼。







GRPC教程 2- gRPC下載以及入門gRPC的評論 (共 條)

分享到微博請遵守國家法律
富宁县| 渭南市| 瑞丽市| 绍兴市| 当雄县| 娄烦县| 内江市| 股票| 沙田区| 迁西县| 桃园市| 江陵县| 金乡县| 德格县| 寻乌县| 克东县| 商洛市| 哈巴河县| 兰溪市| 藁城市| 什邡市| 安岳县| 广西| 天镇县| 富源县| 馆陶县| 武义县| 延长县| 重庆市| 大关县| 洪湖市| 奉节县| 云龙县| 丽水市| 盐城市| 旅游| 敦煌市| 理塘县| 射洪县| 海林市| 屏东市|