gRPC使用的分析

2021-07-22 20:33:48 字數 2442 閱讀 5461

看了docker的原始碼就不得不了解一下grpc這個鬼東西。下面借鑑一下別人的例項,讓我這個初次接觸的人做乙個,最直接的分析。

首先編譯安裝protobuf 工具。

// 定義將要用到的rpc呼叫方法,引數和返回值都在上面進行了定義

service userservice ;

rpc logout(userid) returns (funcresponse){};

}

編譯生成對應的go**。

protoc rpcsrv.go --go_out=plugins=grpc:
rpcsrv.pb.go檔案如下,主要就是生成了相應的結構體:

type

userinfo

struct

type

userid

struct

type

funcresponse

struct

變成服務端程式:

package main  

import (

pb "xcl"

"log"

"net"

"os"

"golang.org/x/net/context"

"google.golang.org/grpc"

) func main()

s := grpc.newserver()

pb.registeruserserviceserver(s, &server{})

log.println("server......")

s.serve(lis)

} const (

port = ":50051" //監聽的埠

) type server struct{} //定義server的結構體

// 實現login的方法,引數和返回值與最上面定義的proto都有對應的關係。

func (s *server) login(ctx context.context, usr *pb.userinfo) (*pb.funcresponse, error) , nil

} // 實現logout的方法

func (s *server) logout(ctx context.context, uid *pb.userid) (*pb.funcresponse, error) , nil

}

定義客戶端:

package main  

import (

"log"

"os"

"strconv"

pb "xcl"

"golang.org/x/net/context"

"google.golang.org/grpc"

) const (

address = "localhost:50051" // 伺服器的套接字

) func main()

defer conn.close()

// 一旦 grpc channel 建立起來,我們需要乙個客戶端存根去執行rpc。我們通過.proto生成的pb包提供的newuserserviceclient方法來完成。

c := pb.newuserserviceclient(conn)

var status pb.userstatus

status = pb.userstatus_online

userinfo := &pb.userinfo

// 直接呼叫相應的方法,來遠端呼叫服務端。

r, err := c.login(context.background(), userinfo)

if err != nil

log.println("login():", r)

uid, err := strconv.parseint(r.reply, 10, 32)

if err != nil

userid := &pb.userid

out, err := c.logout(context.background(), userid)

log.println("logout():", out)

}

參考:[1] grpc官方文件

gRPC使用簡介

grpc是一款語言中立 平台中立 開源的遠端過程呼叫 rpc 系統。在grpc裡,客戶端應用程式可以像呼叫本地物件一樣直接呼叫另一台不同機器上,服務端應用的方法,使得你能夠更容易的建立分布式應用和服務。與許多rpc系統類似,grpc也是基於以下理念 定義乙個服務,指定其能夠被遠端呼叫的方法 包括引數...

grpc框架分析一 Server分析

監聽tcp埠 生成乙個 grpc.server物件,把 grpc.server物件和 實現userserviceserver介面的例項繫結起來 啟動grpc伺服器 func main log.println userservice to listen 9000 success grpcserver ...

grpc 使用方法

php中使用grpc php需要安裝grpc擴充套件。使用protoc命令生成對應的php protoc php out plugins grpc exporttask.proto 生成 包括 exporttask wshexportformat.php wshexporttaskcreatetpl...