日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
從0到1:帶你完整寫一個(gè)GolangGrpc服務(wù)

# 1. 環(huán)境準(zhǔn)備

第一步:安裝 protoc

為嵐皋等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及嵐皋網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、嵐皋網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

前往 protobuf,下載最新版的 protoc ,我下載的是 win 64

第二步:安裝 protoc-gen-go

前往 protobuf-go ,同樣下載最新版的 protoc,同樣下載的是 win 64

將下載后的 protoc.exe 和 protoc-gen-go 放到 %GOPATH%\bin\ 目錄下。

或者更簡單的方法,直接執(zhí)行如下命令就可以安裝

  
 
 
 
  1. go install google.golang.org/grpc/cmd/protoc-gen-go-grpc 

第三步:下載 grpc

  
 
 
 
  1. # 安裝 grpc  
  2. go get -u google.golang.org/grpc 
  3.  
  4. # gRPC運(yùn)行時(shí)接口編解碼支持庫 
  5. go get -u github.com/golang/protobuf/proto  

# 2. 項(xiàng)目目錄結(jié)構(gòu)

在 $GOPATH/src 下新建 iswbm.com 目錄及三個(gè)子目錄(client,server,proto),在終端上進(jìn)入該目錄,執(zhí)行如下命令創(chuàng)建 go.mod

  
 
 
 
  1. mkdir $GOPATH/src/iswbm.com/{client,server,proto} 
  2. cd mkdir $GOPATH/src/iswbm.com/ 
  3.  
  4. # 設(shè)置環(huán)境變量,確保 GO111MODULE 是開啟的 
  5. go env -w GO111MODULE=auto 
  6.  
  7. # 初始化項(xiàng)目 
  8. go mod init 

# 3. 編寫 proto 文件

編寫 proto/simple.proto

  
 
 
 
  1. syntax = "proto3"; 
  2.  
  3. package proto; 
  4. option go_package ="/proto"; 
  5.  
  6. // 定義發(fā)送請求信息 
  7. message SimpleRequest{ 
  8.   // 參數(shù)類型 參數(shù)名稱 標(biāo)識號 
  9.   string data = 1; 
  10.  
  11. // 定義響應(yīng)信息 
  12. message SimpleResponse{ 
  13.   int32 code = 1; 
  14.   string value = 2; 
  15.  
  16. // 定義我們的服務(wù)(可以定義多個(gè)服務(wù),每個(gè)服務(wù)可以定義多個(gè)接口) 
  17. service Simple{ 
  18.   rpc GetSimpleInfo(SimpleRequest) returns (SimpleResponse){}; 

在 iswbm.com 目錄下,執(zhí)行如下命令

  
 
 
 
  1. protoc --go_out=. ./proto/simple.proto 
  2. protoc --go-grpc_out=. ./proto/simple.proto 

完成后,會在當(dāng)前目錄下生成一個(gè) simple 目錄,該目錄下有一個(gè) simple.pb.go 和 simple_grpc.pb.go

# 4. 編寫 server.go

  
 
 
 
  1. package main 
  2.  
  3. import ( 
  4.     "context" 
  5.     pb "iswbm.com/proto" 
  6.     "google.golang.org/grpc" 
  7.     "log" 
  8.     "net" 
  9.  
  10. const ( 
  11.     Address string = ":8000" 
  12.     Network string = "tcp" 
  13.  
  14. // 定義我們的服務(wù) 
  15. type SimpleService struct{ 
  16.     pb.UnimplementedSimpleServer 
  17.  
  18. // 實(shí)現(xiàn) GetSimpleInfo 方法 
  19. func (s *SimpleService) GetSimpleInfo(ctx context.Context, req *pb.SimpleRequest) (*pb.SimpleResponse, error) { 
  20.     data := req.Data 
  21.     log.Println("get from client: ", data) 
  22.     resp := &pb.SimpleResponse{ 
  23.         Code:  8888, 
  24.         Value: "grpc", 
  25.     } 
  26.     return resp, nil 
  27.  
  28. func main() { 
  29.  
  30.     // 1.監(jiān)聽端口 
  31.     listener, err := net.Listen(Network, Address) 
  32.     if err != nil { 
  33.         log.Fatalf("net.listen err: %v", err) 
  34.     } 
  35.     log.Println(Address, " net listening...") 
  36.     // 2.實(shí)例化gRPC服務(wù)端 
  37.     grpcServer := grpc.NewServer() 
  38.  
  39.     // 3.注冊我們實(shí)現(xiàn)的服務(wù) SimpleService 
  40.     pb.RegisterSimpleServer(grpcServer, &SimpleService{}) 
  41.  
  42.     // 4.啟動(dòng)gRPC服務(wù)端 
  43.     err = grpcServer.Serve(listener) 
  44.     if err != nil { 
  45.         log.Fatalf("grpc server err: %v",err) 
  46.     } 
  47.  

完成后,先安裝依賴包

  
 
 
 
  1. go install 

執(zhí)行如下命令運(yùn)行服務(wù)端

  
 
 
 
  1. > go run server/server.go 
  2. 2021/07/28 18:31:42 :8000  net listening... 

# 5. 編寫 client.go

  
 
 
 
  1. package main 
  2.  
  3. import ( 
  4.     "context" 
  5.     "google.golang.org/grpc" 
  6.     "log" 
  7.     pb "iswbm.com/proto" 
  8.  
  9. const ( 
  10.     Address string = ":8000" 
  11.  
  12. func main() { 
  13.     // 1.創(chuàng)建于gRPC服務(wù)端的連接 
  14.     conn, err := grpc.Dial(Address, grpc.WithInsecure()) 
  15.     if err != nil { 
  16.         log.Fatalf("dial conn err: %v", err) 
  17.     } 
  18.     defer conn.Close() 
  19.  
  20.     // 2.創(chuàng)建grpc客戶端 
  21.     client := pb.NewSimpleClient(conn) 
  22.  
  23.     // 3.調(diào)用服務(wù)端提供的服務(wù) 
  24.     req := pb.SimpleRequest{ 
  25.         Data: "Hello,Server", 
  26.     } 
  27.     resp, err := client.GetSimpleInfo(context.Background(), &req) 
  28.     if err != nil { 
  29.         log.Fatalf("resp err: %v", err) 
  30.     } 
  31.     log.Printf("get from server,code: %v,value: %v", resp.Code, resp.Value) 
  32.  

執(zhí)行如下命令運(yùn)行,立馬就能收到來自 server 返回的消息

  
 
 
 
  1. > go run client/client.go 
  2. 2021/07/28 18:54:35 get from server,code: 8888,value: grpc 

同時(shí),在 server 端也會打印來自 client 端的消息

  
 
 
 
  1. > go run server/server.go 
  2. 2021/07/28 18:51:59 :8000  net listening... 
  3. 2021/07/28 18:54:35 get from client:  Hello,Server 

本文轉(zhuǎn)載自微信公眾號「Go編程時(shí)光」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系Go編程時(shí)光公眾號。

 


分享題目:從0到1:帶你完整寫一個(gè)GolangGrpc服務(wù)
分享地址:http://www.5511xx.com/article/dpihicj.html