grpc基本使用

前言

grpc 是一種基于 HTTP/2 設(shè)計的RPC框架枷颊,采用protobuf作為idl (交互式數(shù)據(jù)語言Interactive Data Language) 本篇簡單介紹下grpc的使用中贝,并制作一個demo

一聋庵、安裝protoc

$ go get -u github.com/golang/protobuf
$ go get -u github.com/golang/protobuf/protoc-gen-go
  • 確保protoc protoc-gen-go安裝成功星压,可到$GOPATH/bin/ 目錄下查看

二、項目創(chuàng)建

1.創(chuàng)建目錄結(jié)構(gòu)

hello
├── client
│ └── client.go
└── server
└── server.go
└── proto
└── hello.proto
└── hello.pb.go # 通過protoc命令生成
├── go.mod

編寫proto文件
// hello.proto
syntax = "proto3";
service HelloService {
    rpc SayHello(SayHelloRequest)returns(SayHelloResponse){}
}
message SayHelloRequest{
    string name = 1;
}
message SayHelloResponse {
    string msg = 1;
}
生成pb文件  proto/hello.pb.go
$ protoc --go_out=plugins=grpc:./ ./proto/hello.proto

2 編寫服務(wù)端代碼

// server/server.go
package main

import (
    "context"
    "fmt"
    "google.golang.org/grpc"
    hello "hello/proto"
    "log"
    "net"
)

type HelloServer struct {
}

func (h *HelloServer) SayHello(ctx context.Context, request *hello.SayHelloRequest) (*hello.SayHelloResponse, error) {
    name := request.Name
    fmt.Printf("receive name : %s", name)
    msg := fmt.Sprintf("hello, %s", name)
    return &hello.SayHelloResponse{Msg: msg}, nil
}
func main() {
    server  := grpc.NewServer() // 創(chuàng)建gRPC Server 對象
    // 將HelloService 注冊到gRPC Server 的內(nèi)部注冊中心哼拔;接收到請求時盖呼,通過內(nèi)部的服務(wù)發(fā)現(xiàn),發(fā)現(xiàn)該服務(wù)的端口并轉(zhuǎn)接進行邏輯處理
    hello.RegisterHelloServiceServer(server,&HelloServer{})
    // 創(chuàng)建listen弧岳,監(jiān)聽tcp端口
    lis, err := net.Listen("tcp", ":8080")
    if err != nil {
        log.Fatalf("failed to listen:%+v", err)
    }
    if err := server .Serve(lis); err != nil {
        log.Fatalf("err %+v", err)
    }
}

3 編寫客戶端代碼

// client/client.go
package main

import (
    "context"
    "google.golang.org/grpc"
    hello "hello/proto"
    "log"
)

const (
    Address = "127.0.0.1:8080"
)

func main() {
    conn, err := grpc.Dial(Address, grpc.WithInsecure())
    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }
    defer conn.Close()
    client := hello.NewHelloServiceClient(conn)
    ctx := context.Background()
    request := &hello.SayHelloRequest{Name: "lester"}
    response, err := client.SayHello(ctx, request)
    if err != nil {
        log.Fatalf("get response err :%v", err)
    }
    log.Printf("receive response msg:%s", response.Msg)
}

  • 根目錄下運行
go run server/server.go
  • 另起一個終端運行
go run client/client.go

客戶端輸出結(jié)果


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凳忙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子禽炬,更是在濱河造成了極大的恐慌涧卵,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腹尖,死亡現(xiàn)場離奇詭異柳恐,居然都是意外死亡,警方通過查閱死者的電腦和手機热幔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門乐设,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绎巨,你說我怎么就攤上這事近尚。” “怎么了场勤?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵戈锻,是天一觀的道長歼跟。 經(jīng)常有香客問我,道長格遭,這世上最難降的妖魔是什么哈街? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮拒迅,結(jié)果婚禮上骚秦,老公的妹妹穿的比我還像新娘。我一直安慰自己璧微,他們只是感情好骤竹,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著往毡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪靶溜。 梳的紋絲不亂的頭發(fā)上开瞭,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音罩息,去河邊找鬼嗤详。 笑死,一個胖子當著我的面吹牛瓷炮,可吹牛的內(nèi)容都是我干的葱色。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼娘香,長吁一口氣:“原來是場噩夢啊……” “哼苍狰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起烘绽,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤淋昭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后安接,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翔忽,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年盏檐,在試婚紗的時候發(fā)現(xiàn)自己被綠了歇式。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡胡野,死狀恐怖材失,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情硫豆,我是刑警寧澤豺憔,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布额获,位于F島的核電站,受9級特大地震影響恭应,放射性物質(zhì)發(fā)生泄漏抄邀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一昼榛、第九天 我趴在偏房一處隱蔽的房頂上張望境肾。 院中可真熱鬧,春花似錦胆屿、人聲如沸奥喻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽环鲤。三九已至,卻和暖如春憎兽,著一層夾襖步出監(jiān)牢的瞬間冷离,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工纯命, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留西剥,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓亿汞,卻偏偏與公主長得像瞭空,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子疗我,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容