中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang中grpc怎么用

發布時間:2021-12-15 09:27:50 來源:億速云 閱讀:179 作者:小新 欄目:大數據

小編給大家分享一下Golang中grpc怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1.  grpc安裝

pip install --upgrade pip

pip install grpcio --user 

pip install protobuf --user

pip install grpcio-tools --user

sudo yum -y install protobuf-compiler protobuf-static protobuf protobuf-devel

dnf install protobuf-compiler.x86_64 

pip install googleapis-common-protos --user

2. 導入grpc包

go get -u google.golang.org/grpc
go get -u github.com/golang/protobuf/protoc-gen-go

3. 編寫test.proto文件

// 指定版本

syntax = "proto3";

option objc_class_prefix = "HLW";
// 定義包名
package demo;

// 定義服務
service ServerBase{
  // 定義接口
  // 方法
  rpc MakeMD5(Request) returns (Response){}
  rpc SayHello(HelloRequest) returns (HelloReplay){}
}

//請求的結構體
message HelloRequest{
   // 類型 字段 = 標識號
    string name = 1;
}
//返回的結構體
message HelloReplay{
    string message = 1;
}

// 定義請求結構體
message Request{
  string Data = 1;
}

// 定義返回接口體數據
message Response{
  string Msg = 1;
}

4. 生成.go文件

protoc --go_out=plugins=grpc: . test.proto

這時候目錄低下會自動生成test.pb.go文件

5. 簡單的書寫server.go

package main
import (
  "crypto/md5"
  "errors"
  "fmt"
  "github.com/srlemon/note/grpc_"
  "golang.org/x/net/context"
  "google.golang.org/grpc"
  "log"
  "net"
)

const (
  PORT = ":5003"
)

func main() {
  // 開啟監聽
  lis, err := net.Listen("tcp", PORT)
  if err != nil {
     log.Fatal(err)
  }
  // new
  s := grpc.NewServer()
  // 注冊服務
  demo.RegisterServerBaseServer(s, &Serve{})
  log.Println("rpc服務已經開啟")
  s.Serve(lis)
}

// Serve 服務端
type Serve struct {
}

// MakeMD5 方法
func (s *Serve) MakeMD5(ctx context.Context, req *demo.Request) (ret *demo.Response, err error) {
  if req == nil {
     err = errors.New("請求數據為空")
     return
  }
  md := md5.New()
  data := md.Sum([]byte(req.Data))
  ret = new(demo.Response)
  ret.Msg = fmt.Sprintf("%x", data)
  return
}

// SayHello 方法
func (s *Serve) SayHello(ctc context.Context, req *demo.HelloRequest) (ret *demo.HelloReplay, err error) {
  if req == nil {
     err = errors.New("請求數據為空")
     return
  }
  ret = new(demo.HelloReplay)
  ret.Message = req.Name
  return
}

    go run server.go  開啟rpc服務

6. 寫client.go文件

    

package main
import (
  "fmt"
  demo "github.com/srlemon/note/grpc_"
  "golang.org/x/net/context"
  "google.golang.org/grpc"
  "log"
)

const (
  addr = "127.0.0.1:5003"
)

func main() {
  ctx := context.Background()
  // 連接代理
  conn, err := grpc.Dial(addr, grpc.WithInsecure())
  if err != nil {
     log.Fatal("did no connect", err)
  }
  defer conn.Close()
  // 生成一個客戶端
  client := demo.NewServerBaseClient(conn)
  var (
     data *demo.Request
     res  *demo.Response
  )
  data = new(demo.Request)
  data.Data = "哈哈,和黑"
  // 使用服務端方法
  if res, err = client.MakeMD5(ctx, data); err != nil {

     log.Fatal("sssssssssss", err)
  }
  // 輸出進行加密后的信息
  fmt.Println(string(res.Msg))
  // 使用服務端方法
  _d, _ := client.SayHello(ctx, &demo.HelloRequest{Name: "哈哈哈"})
  // 輸出要說的內容
  fmt.Println(_d.Message)
}

go run client.go

終端輸出:

Golang中grpc怎么用

以上是“Golang中grpc怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

界首市| 垣曲县| 周至县| 大城县| 华坪县| 厦门市| 安塞县| 信丰县| 潼关县| 平山县| 县级市| 富阳市| 曲阜市| 乌兰县| 新河县| 青州市| 蕉岭县| 恩施市| 三门峡市| 石家庄市| 嫩江县| 大庆市| 泽州县| 尚志市| 沙河市| 伊宁县| 曲麻莱县| 新竹县| 苏尼特右旗| 饶河县| 呼玛县| 当阳市| 密云县| 叙永县| 崇义县| 沿河| 连州市| 望奎县| 凌云县| 阿勒泰市| 临澧县|