精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

gRPC入門指南之 雙向流式RPC

網絡 通信技術
與服務端流式 RPC類似,都只支持單項連續發送數據,今天我們要來學習雙向流式 RPC 支持通信雙方同時多次發送或接收數據。

[[408239]]

本文轉載自微信公眾號「Golang來啦」,作者Seekload。轉載本文請聯系Golang來啦公眾號。

你好,我是 Seekload!

前言

前一篇文章我們學習了客戶端流式 RPC,客戶端多次向服務端發送數據,發送結束之后,由服務端返回一個響應。與服務端流式 RPC類似,都只支持單項連續發送數據,今天我們要來學習雙向流式 RPC 支持通信雙方同時多次發送或接收數據。如下如所示:

新建并編譯proto文件

新建 bidirectional_stream.proto 文件:

  1. syntax = "proto3"
  2.  
  3. package proto; 
  4.  
  5. // 定義流式請求信息 
  6. message StreamRequest{ 
  7.   // 參數類型 參數名稱 標識號 
  8.   string data = 1; 
  9.  
  10. // 定義流響應信息 
  11. message StreamResponse{ 
  12.   int32 code = 1; 
  13.   string value = 2; 
  14.  
  15. // 定義我們的服務(可以定義多個服務,每個服務可以定義多個接口) 
  16. service StreamService{ 
  17.   // 雙向流RPC,需要在請求、響應數據前加stream 
  18.   rpc Record(stream StreamRequest) returns (stream StreamResponse){}; 

雙向流式 RPC,定義方法時需要在請求值和返回值之前加上 stream。

進入 bidirectional_stream.proto 所在的目錄,使用如下命令編譯文件

  1. protoc --go_out=plugins=grpc:. bidirectional_stream.proto 

執行完成之后會生成 bidirectional_stream.pb.go 文件。

創建server端

  1. package main 
  2.  
  3. import ( 
  4.  pb "go-grpc-example/4-bidirectional_stream_rpc/proto" 
  5.  "google.golang.org/grpc" 
  6.  "io" 
  7.  "log" 
  8.  "net" 
  9.  "strconv" 
  10.  "time" 
  11.  
  12. const ( 
  13.  Address string = ":8000" 
  14.  Network string = "tcp" 
  15.  
  16. // 定義我們的服務 
  17. type StreamService struct{} 
  18.  
  19. // 實現 Record() 方法 
  20. func (s *StreamService) Record(srv pb.StreamService_RecordServer) error { 
  21.  n := 1 
  22.  for { 
  23.   // 接收數據 
  24.   req, err := srv.Recv() 
  25.   if err == io.EOF { 
  26.    return nil 
  27.   } 
  28.   if err != nil { 
  29.    log.Fatalf("stream get from client err: %v", err) 
  30.    return err 
  31.   } 
  32.   // 發送數據 
  33.   err = srv.Send(&pb.StreamResponse{ 
  34.    Code:  int32(n), 
  35.    Value: "This is the " + strconv.Itoa(n) + " message"
  36.   }) 
  37.   if err != nil { 
  38.    log.Fatalf("stream send to client err: %v", err) 
  39.    return err 
  40.   } 
  41.   n++ 
  42.   log.Println("stream get from client: ", req.Data) 
  43.   time.Sleep(1 * time.Second
  44.  } 
  45.  return nil 
  46.  
  47. func main() { 
  48.  // 1.監聽端口 
  49.  listener, err := net.Listen(Network, Address) 
  50.  if err != nil { 
  51.   log.Fatalf("listener err: %v", err) 
  52.  } 
  53.  log.Println(Address + " net.Listing..."
  54.  
  55.  // 2.實例化gRPC實例 
  56.  grpcServer := grpc.NewServer() 
  57.  
  58.  // 3.注冊我們的服務 
  59.  pb.RegisterStreamServiceServer(grpcServer, &StreamService{}) 
  60.  
  61.  // 4.啟動gRPC服務端 
  62.  err = grpcServer.Serve(listener) 
  63.  if err != nil { 
  64.   log.Fatalf("grpc server err: %v", err) 
  65.  } 

在實現的 Record() 方法中,for() 循環里面讀取客戶端發送的消息并返回一個響應數據。

運行服務端:

  1. go run server.go 
  2.  
  3. 輸出: 
  4. :8000  net listening... 

創建client端

  1. package main 
  2.  
  3. import ( 
  4.  "context" 
  5.  pb "go-grpc-example/4-bidirectional_stream_rpc/proto" 
  6.  "google.golang.org/grpc" 
  7.  "io" 
  8.  "log" 
  9.  "strconv" 
  10.  "time" 
  11.  
  12. const Address = ":8000" 
  13.  
  14. func main() { 
  15.  // 1.連接服務端 
  16.  conn, err := grpc.Dial(Address, grpc.WithInsecure()) 
  17.  if err != nil { 
  18.   log.Fatalf("grpc conn err: %v", err) 
  19.  } 
  20.  defer conn.Close() 
  21.  
  22.  // 2.創建gRPC客戶端 
  23.  grpcClient := pb.NewStreamServiceClient(conn) 
  24.  
  25.  // 3.調用 Record() 方法獲取流 
  26.  stream, err := grpcClient.Record(context.Background()) 
  27.  if err != nil { 
  28.   log.Fatalf("call record err: %v", err) 
  29.  } 
  30.  
  31.  for i := 0; i < 5; i++ { 
  32.   // 4.發送數據 
  33.   err := stream.Send(&pb.StreamRequest{ 
  34.    Data: strconv.Itoa(i), 
  35.   }) 
  36.   if err != nil { 
  37.    log.Fatalf("stream send to server err: %v", err) 
  38.   } 
  39.   // 5.接收服務端發送過來的數據 
  40.   resp, err := stream.Recv() 
  41.   if err == io.EOF { 
  42.    break 
  43.   } 
  44.   if err != nil { 
  45.    log.Fatalf("stream get from server err: %v", err) 
  46.   } 
  47.   log.Printf("stream get from server,code:%v,value:%v", resp.GetCode(), resp.Value) 
  48.   time.Sleep(1 * time.Second
  49.  } 
  50.  // 6.關閉流 
  51.  err = stream.CloseSend() 
  52.  if err != nil { 
  53.   log.Fatalf("close stream err:%v", err) 
  54.  } 

客戶端代碼,在 for() 循環里面向服務端發送了 5 次消息,并接收服務端返回的數據,5次數據交互之后調用 CloseSend() 關閉流。

運行客戶端:

  1. go run client.go 

客戶端輸出:

  1. stream get from server,code:1,value:This is the 1 message 
  2. stream get from server,code:2,value:This is the 2 message 
  3. stream get from server,code:3,value:This is the 3 message 
  4. stream get from server,code:4,value:This is the 4 message 
  5. stream get from server,code:5,value:This is the 5 message 

服務端輸出:

  1. stream get from client:  0 
  2. stream get from client:  1 
  3. stream get from client:  2 
  4. stream get from client:  3 
  5. stream get from client:  4 

觀察仔細的同學會注意到,客戶端和服務端是交替輸出的。

總結

 

這篇文章我們簡單介紹了 gRPC 的雙向流式 RPC,支持通信雙方同時多次發送或接收數據。

 

責任編輯:武曉燕 來源: Golang來啦
相關推薦

2021-06-10 07:49:26

RPCgRPC模式

2021-08-30 07:49:32

NacosSync雙向復制

2011-11-29 16:38:58

Knockout

2012-02-29 01:03:10

ubuntuLinux

2011-10-18 17:05:45

分布式流式數據庫

2011-03-08 09:22:37

2024-01-02 12:17:44

Go傳統遠程

2011-05-18 15:15:44

MySQL

2021-03-26 10:31:19

人工智能AIOps

2010-08-03 15:19:08

FlexBuilder

2011-08-03 10:01:20

IOS CoreData 雙向關系

2019-07-18 07:52:01

路由策略IP路由

2010-12-31 13:30:12

2015-09-24 09:54:32

物聯網

2011-01-10 13:21:45

linuxsamba

2024-11-19 15:07:07

2010-07-20 16:13:25

Perl線程

2011-03-08 16:50:35

2022-05-08 16:42:27

Rust編程語言

2023-02-07 10:40:30

gRPC系統Mac
點贊
收藏

51CTO技術棧公眾號

久久理论电影网| 欧美a级在线| 在线看国产一区二区| 一级做a爰片久久| 国产免费av电影| 亚洲看片一区| 色妞久久福利网| 在线xxxxx| 国产福利91精品一区二区| 亚洲欧美激情一区二区| 久久精品国产精品国产精品污 | 伊人成人免费视频| 精品众筹模特私拍视频| 国产精品激情偷乱一区二区∴| 99久久国产免费免费| 亚洲成人第一网站| 欧美1区2区| 最近2019免费中文字幕视频三| 麻豆tv在线观看| 日本国产亚洲| 色综合久久久久综合| 国产精品无码电影在线观看| 成人在线免费公开观看视频| av在线这里只有精品| 成人激情视频网| 一级特黄免费视频| 一本久道久久综合婷婷鲸鱼| 欧美另类69精品久久久久9999| 欧美激情 一区| 一本久久青青| 亚洲精品白浆高清久久久久久| 天堂av.com| 九九久久国产| 欧美伊人久久久久久久久影院| 欧美精品久久久久久久自慰| 影院在线观看全集免费观看| 国产精品进线69影院| 色一情一区二区三区四区| 亚洲欧美综合一区二区| 成人网页在线观看| 97超级碰碰| 精品人妻伦一区二区三区久久| 美女任你摸久久| 国产精品91一区| 国产在线观看黄色| 性欧美videos另类喷潮| 97在线视频免费播放| 欧美日韩大片在线观看| 欧美日韩日本国产亚洲在线 | 可以免费看不卡的av网站| 久久久最新网址| 久久一二三四区| 欧美日韩国产一区精品一区| 欧美黑人xxx| 国产小视频在线观看免费| 欧美暴力喷水在线| 欧美激情欧美激情在线五月| 精品国产乱码久久久久久鸭王1 | 国产清纯在线一区二区www| 欧美一区二区三区四区五区六区| 欧美美乳在线| 欧美国产日本视频| 亚洲一区在线直播| 深夜国产在线播放| 午夜私人影院久久久久| 久久成人免费观看| 怡红院成人在线| 欧美日韩一区小说| 日本美女视频一区| 午夜电影一区| 亚洲精品短视频| 在线免费看黄视频| 日韩电影免费网站| 欧美成人激情在线| 国产精品视频久久久久久久| 欧美亚洲一区| 国产精品网站大全| 国产黄色片免费观看| 成人国产精品免费观看动漫| 欧美日韩综合久久| 三区四区在线视频| 亚洲亚洲人成综合网络| 美女福利视频在线| 自拍偷拍欧美日韩| 亚洲丁香久久久| 亚洲精品国产一区黑色丝袜 | 国产91沈先生在线播放| 成人免费网站观看| 欧美又粗又大又爽| zjzjzjzjzj亚洲女人| 国产毛片一区二区三区| 久久精品2019中文字幕| 日韩精品乱码久久久久久| 日韩国产高清影视| 99re资源| 国产大学生校花援交在线播放| 自拍偷拍亚洲激情| 能在线观看的av| 在线不卡一区| 精品一区二区亚洲| 日韩一区二区不卡视频| 亚洲专区欧美专区| 91成人免费看| 国产高清自拍视频在线观看| 一区二区三区日韩精品视频| 少妇高清精品毛片在线视频| 日韩欧美中文字幕一区二区三区| 亚洲毛片在线看| 久久久久久久久久久久国产| 青青草原综合久久大伊人精品优势 | 亚州欧美一区三区三区在线| 波多野结衣乳巨码无在线观看| 欧美在线观看你懂的| 男男一级淫片免费播放| 国产精品成久久久久| 日本伊人精品一区二区三区介绍 | 亚洲美女中文字幕| 欧美成人综合色| 美女网站在线免费欧美精品| 欧美大陆一区二区| 高h视频在线播放| 欧美日韩大陆一区二区| 欧美大波大乳巨大乳| 激情综合在线| julia一区二区中文久久94| 日本在线观看网站| 日本精品一区二区三区高清| 中文字幕一区二区久久人妻网站| 女人香蕉久久**毛片精品| 国产综合色香蕉精品| 国产毛片av在线| 日韩欧美成人免费视频| 韩国三级hd两男一女| 亚洲综合小说| 91久久久在线| 一级日本在线| 欧美日本一区二区三区四区 | 国产一区二区三区电影在线观看| 久久理论片午夜琪琪电影网| 精品久久久免费视频| 亚洲色图制服诱惑| 色婷婷一区二区三区在线观看| 区一区二视频| 国产日韩在线亚洲字幕中文| 成人好色电影| 欧美日韩一区二区三区视频| 美女av免费看| 精品一区在线看| 正义之心1992免费观看全集完整版| 韩日精品一区| 色噜噜久久综合伊人一本| 一级片免费网站| ㊣最新国产の精品bt伙计久久| 蜜臀av免费观看| 婷婷综合久久| 亚洲专区在线视频| 久草在线新免费首页资源站| 精品国一区二区三区| 国产午夜福利片| 91免费国产在线| 国产免费视频传媒| 久久五月天小说| 91性高湖久久久久久久久_久久99| 日本不卡三区| 日韩小视频在线观看专区| 久久精品免费av| 26uuu国产电影一区二区| 欧洲av无码放荡人妇网站| 国产影视精品一区二区三区| 成人午夜在线观看| 丝袜国产在线| 日韩高清a**址| 国语对白做受69按摩| 亚洲欧美自拍偷拍| 蜜桃色一区二区三区| 国产精品入口66mio| 天堂精品一区二区三区| 亚洲无线观看| 国产97在线|亚洲| 国产丝袜在线| 亚洲国产美女久久久久| 久草热在线观看| 亚洲欧美色一区| 极品人妻一区二区三区| 久久精品国产**网站演员| 免费人成自慰网站| 久久综合欧美| 亚洲自拍欧美另类| 校园春色亚洲| 久久久精品影院| 深夜福利在线视频| 这里只有精品视频在线观看| 日韩精品一卡二卡| 中文字幕一区二区三区在线播放| 91porn在线| 日本aⅴ免费视频一区二区三区| 国产精品视频一二三四区| 久久av导航| 国产精品久久国产三级国电话系列| 色香欲www7777综合网| 欧美成年人在线观看| 欧美日韩国产中文字幕在线| 91麻豆精品久久久久蜜臀 | 欧美三级乱人伦电影| 伊人365影院| 亚洲欧洲精品一区二区三区| 日韩精品卡通动漫网站| 国产激情视频一区二区三区欧美| 女性隐私黄www网站视频| 一区二区视频欧美| 咪咪色在线视频| 沈樵精品国产成av片| 国产精品10p综合二区| 88xx成人网| 5566成人精品视频免费| 中文国产字幕在线观看| 中文字幕亚洲综合久久| 国模精品一区二区| 亚洲精品成人免费| 亚洲成a人片在线| 欧美日韩aaa| 久久久久精彩视频| 一道本成人在线| 亚洲黄色一区二区| 亚洲国产欧美日韩另类综合| 亚洲 欧美 变态 另类 综合| 欧美极品另类videosde| 少妇按摩一区二区三区| 99热国产精品| 看全色黄大色黄女片18| 国产91丝袜在线播放0| 日本一二三区在线| 韩国av一区二区| 国产精品区在线| 免费观看在线综合| 欧美午夜性生活| 久久精品卡一| 黄色av免费在线播放| 久久精品首页| www.亚洲天堂网| 国产精品一卡| 亚洲国产精品久久久久婷蜜芽| 亚洲国产午夜| 青娱乐自拍偷拍| 国产日韩欧美| 漂亮人妻被中出中文字幕| 99在线精品视频在线观看| heyzo亚洲| 老司机一区二区三区| 久久久999视频| 午夜一区在线| 99草草国产熟女视频在线| 日韩高清不卡一区二区| 性chinese极品按摩| 开心九九激情九九欧美日韩精美视频电影| 91av俱乐部| 久久成人免费网站| 欧美激情第四页| 成人av网站大全| xxxx黄色片| 久久精品亚洲乱码伦伦中文| 国产人妻大战黑人20p| 中文字幕一区三区| 欧美日韩综合一区二区| 亚洲高清在线视频| 超碰超碰超碰超碰| 欧美日韩一二三区| 国产黄a三级三级三级| 亚洲国产精品久久久久秋霞不卡| 四虎影视2018在线播放alocalhost| 精品无码久久久久久国产| 国产98在线| 久热精品视频在线观看一区| www555久久| 日本久久亚洲电影| gogo大尺度成人免费视频| av色综合网| 伊人成综合网yiren22| 亚洲午夜高清视频| 午夜日韩视频| 激情婷婷综合网| 国产一区二区电影| 亚洲色图14p| 日韩理论片中文av| 欧美另类一区二区| 欧美日韩国产欧美日美国产精品| 精品国产亚洲一区二区麻豆| 亚洲欧美中文字幕在线一区| 免费高清在线观看| 91av在线播放视频| 亚洲福利影视| 精品乱色一区二区中文字幕| 日韩欧美1区| 成人免费播放器| 韩国av一区二区三区在线观看| av鲁丝一区鲁丝二区鲁丝三区| 国产精品美女久久久久aⅴ| 伊人国产在线观看| 欧美巨大另类极品videosbest | 精品一区二区成人免费视频| 亚洲高清免费| 日韩大片一区二区| 97久久超碰国产精品| 中国一级片在线观看| 一本到不卡精品视频在线观看| 国产伦精品一区二区三区视频痴汉| 日韩激情av在线免费观看| 1769免费视频在线观看| 国产精品高潮在线| 清纯唯美亚洲经典中文字幕| 欧美xxxx吸乳| 日韩成人精品视频| 中文字幕狠狠干| 亚洲综合一区二区| 国产美女免费视频| 国产午夜精品视频| 成人美女大片| 国产精品区一区| 欧美日韩国内| 超碰91在线播放| √…a在线天堂一区| 中文字幕第一页在线播放| 国产手机视频精品| 女海盗2成人h版中文字幕| 成人免费视频观看视频| 希岛爱理av一区二区三区| 久久综合久久色| 久久综合av免费| 日本熟妇毛耸耸xxxxxx| 精品国产在天天线2019| 影音先锋男人资源在线| 国产在线拍偷自揄拍精品| 青青草综合网| 一区二区三区 日韩| 亚洲国产成人自拍| 中文字幕乱伦视频| 亚洲无亚洲人成网站77777| 欧美一区 二区 三区| 九色91在线视频| 国产精品毛片在线| 免费中文字幕av| 精品久久久久久久大神国产| 午夜性色福利影院| 91成人在线视频| 久久a爱视频| 99爱视频在线| 久久青草国产手机看片福利盒子| 国产农村妇女aaaaa视频| 亚洲精品午夜精品| 三上悠亚国产精品一区二区三区| 久久久久久久久久久一区| 欧美一级播放| 性欧美一区二区| 欧美三级电影精品| 黄色在线论坛| 成人精品视频久久久久 | 一区二区传媒有限公司| av电影天堂一区二区在线观看| 日本熟妇乱子伦xxxx| 亚洲美女在线看| 精品国产乱码久久久久久蜜柚 | 国产精品视区| 新91视频在线观看| 欧美专区日韩专区| 嫩草香蕉在线91一二三区| 91在线网站视频| 亚洲高清毛片| av电影在线不卡| 欧美日本免费一区二区三区| 国产福利视频在线| 国产不卡一区二区在线观看| 91久久亚洲| 日本精品在线观看视频| 91精品国产欧美日韩| av免费在线网站| 精品欧美日韩在线| 蜜臀精品久久久久久蜜臀| 国产精品嫩草影院俄罗斯| 精品美女一区二区| 中文字幕乱码中文乱码51精品| 日韩电影大全在线观看| 韩国av一区二区三区在线观看| 日韩av片在线播放| 国产一区二区三区在线观看网站 | 黄色一级大片在线免费看产| 99久久久精品免费观看国产| 久久国产99| 欧美三级免费看| 国产亚洲精品久久久久久777| 一区在线不卡| 成年人视频网站免费观看| 国产精品乱人伦中文| 日本毛片在线观看| 国产欧美一区二区三区视频| 99在线|亚洲一区二区| 精品一区二区在线观看视频| 亚洲国产天堂网精品网站| 国产一区精品福利| 成人免费观看cn| 国产精品国产三级国产普通话99 |