grpc 思想:定義乙個服務, 指定其可以被遠端呼叫的方法及其引數和返回型別。
rpc sayhello(hellorequest) returns (helloresponse)
rpc lotsofreplies(hellorequest) returns (stream helloresponse)
rpc lotsofgreetings(stream hellorequest) returns (helloresponse)
rpc bidihello(stream hellorequest) returns (stream helloresponse)
主要是定義服務的方法以及資料格式
syntax = "proto3";// 協議為proto3
package services;
// 定義傳送請求資訊
message prodrequest
// 定義響應資訊
message prodresponse
// 定義服務
service prodservice
編譯proto檔案
指令編譯方法,進入prod.proto檔案所在目錄,執行:1.定義服務
protoc --go_out=plugins=grpc:./ ./prod.proto
package services
import "context"
type prodservice struct
func (this *prodservice) getprodstock(context.context, *prodrequest) (*prodresponse, error),nil
}
context.context,它的作用結束超時
或取消
的請求.
2.啟動grpc伺服器
package main
import (
"google.golang.org/grpc"
"grpcserver/services"
"log"
"net"
)const (
// address 監聽位址
address string = ":8081"
// network 網路通訊協議
network string = "tcp"
)func main()
log.println(address[1:],"net.listing...")
// 新建grpc伺服器例項
grpcserver := grpc.newserver()
// 註冊服務
services.registerprodserviceserver(grpcserver,new(services.prodservice))
grpcserver.serve(lis)
}
執行服務端
go run server.go
2021/01/17 05:19:04 8081 net.listing...
package main
import (
"context"
"fmt"
"google.golang.org/grpc"
"grpccli/services"
"log"
)const (
// address 連線位址
address string = ":8081"
)func main()
defer conn.close()
// 建立grpc連線
prodclient := services.newprodserviceclient(conn)
prodres,err := prodclient.getprodstock(context.background(),&services.prodrequest)
if err != nil
fmt.println(prodres.prodstock)
}
執行客戶端
go run client.go
20
成功呼叫server端資料。 Go gRPC教程 雙向流式RPC(五)
雙向流式rpc 客戶端和服務端雙方使用讀寫流去傳送乙個訊息序列,兩個流獨立操作,雙方可以同時傳送和同時接收。情景模擬 雙方對話 可以一問一答 一問多答 多問一答,形式靈活 新建both stream.proto檔案 1.定義傳送資訊 定義流式請求資訊 message streamrequest2.定...
實現RPC框架
什麼是rpc client端 student student call serveraddr,addage,student 1.將這個呼叫對映為call id。2.將call id,student params 序列化,以二進位制形式打包 3.把2中得到的資料報傳送給serveraddr,這需要使用...
rpc框架解釋
rpc是指遠端過程呼叫,也就是說兩台伺服器a,b,乙個應用部署在a伺服器上,想要呼叫b伺服器上應用提供的函式 方法,由於不在乙個記憶體空間,不能直接呼叫,需要通過網路來表達呼叫的語義和傳達呼叫的資料。首先,要解決通訊的問題,主要是通過在客戶端和伺服器之間建立tcp連線,遠端過程呼叫的所有交換的資料都...