精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

777色狠狠一区二区三区| 国产女人aaa级久久久级 | 波多野结衣 在线| 中文字幕 在线观看| 国产日产欧美一区二区视频| 国产欧美日韩高清| 精品少妇一二三区| 成人高清电影网站| 欧美变态凌虐bdsm| 色多多视频在线播放| 视频在线这里都是精品| 99国产精品久久久久| 国产精品一区二区三| 久草福利资源在线观看| 精品99久久| 精品久久久影院| 污污动漫在线观看| 日本蜜桃在线观看视频| 亚洲人成在线观看一区二区| 99re热精品| 中文天堂在线播放| 在线精品在线| 久久韩剧网电视剧| 欧美色图亚洲激情 | 国产日产精品一区二区三区四区 | 日韩高清电影一区| 久久久亚洲欧洲日产国码aⅴ| 久久久久无码精品国产sm果冻 | 久久这里只有精品免费| 成人羞羞网站入口| 亚洲欧美日韩高清| 91丝袜在线观看| 婷婷综合国产| 在线播放91灌醉迷j高跟美女 | 日韩av免费| 午夜不卡在线视频| 免费在线精品视频| 日韩欧美小视频| 久久久亚洲高清| 久久精品中文字幕一区二区三区| 99视频免费看| 经典一区二区三区| 国产啪精品视频| 国产精品51麻豆cm传媒| 男女精品网站| 秋霞av国产精品一区| 亚洲黄色一区二区| 99pao成人国产永久免费视频| 欧美激情视频播放| 超碰在线国产97| 亚洲无中文字幕| 久久影院资源网| 欧美在线视频第一页| 99久久99久久精品国产片桃花 | 美女黄毛**国产精品啪啪| 免费看国产片在线观看| 国产91丝袜在线观看| 99se婷婷在线视频观看| 亚洲免费视频网| 岛国av在线一区| 国产精品一区在线播放| 欧美一区二区三区成人片在线| 成人午夜电影久久影院| 国产精品成人一区二区三区| 黄频网站在线观看| 91免费版在线看| 欧美日韩天天操| 97电影在线看视频| 亚洲视频一二三区| 无码人妻精品一区二区蜜桃网站| 久草免费在线色站| 亚洲444eee在线观看| 男人揉女人奶房视频60分 | 国产色综合天天综合网| 国产女人18毛片水真多| 国产精品一区二区视频| 国产一区国产精品| 久久精品蜜桃| 国产精品电影一区二区三区| 国产精品久久久影院| xxx性欧美| 欧美综合天天夜夜久久| 中文字幕亚洲影院| 精品三级在线观看视频| 亚洲性夜色噜噜噜7777| 翔田千里88av中文字幕| 在线精品一区| 国产欧美精品xxxx另类| 亚洲第一视频在线| 99r国产精品| 亚洲欧洲精品一区| 日本一本在线免费福利| 色综合欧美在线| 午夜免费一级片| 黄色网一区二区| 色婷婷综合久久久久| 天堂资源在线播放| 日本女人一区二区三区| 国产精品久久久久免费| 国产视频二区在线观看| 一区二区在线观看视频| 人妻无码视频一区二区三区| 一区二区三区免费在线看| 亚洲免费一在线| 欧洲第一无人区观看| 久久久久99| 91超碰在线电影| porn视频在线观看| 亚洲va欧美va人人爽| 亚洲一区二区福利视频| 精品中文一区| 欧美国产日韩中文字幕在线| 在线观看亚洲一区二区| 26uuu国产在线精品一区二区| 一本久道久久综合| 免费观看欧美大片| 精品日韩99亚洲| 小嫩苞一区二区三区| 午夜在线一区| 国产女人水真多18毛片18精品| av在线资源站| 色又黄又爽网站www久久| 特级特黄刘亦菲aaa级| 欧美好骚综合网| 国产精品av免费在线观看| 日批免费在线观看| 亚洲精品大片www| 亚洲xxx在线观看| 国产欧美日韩精品一区二区三区| 欧美国产日韩二区| 国产情侣激情自拍| 中文字幕一区二区5566日韩| 麻豆传传媒久久久爱| 日韩伦理一区二区三区| 久久久久日韩精品久久久男男| 在线观看国产区| 久久久99精品免费观看| 国产免费一区二区三区视频| 国产精品色在线网站| 欧美激情一区二区三级高清视频| av网站免费播放| 综合电影一区二区三区| 午夜国产福利在线观看| 五月开心六月丁香综合色啪| 国产精品一二区| wwwww在线观看免费视频| 色激情天天射综合网| 日韩精品电影一区二区| 亚洲欧美视频| 奇米影视首页 狠狠色丁香婷婷久久综合| 亚洲精品福利电影| 日韩乱码在线视频| 国产原创视频在线| 久久精品亚洲精品国产欧美| 久久综合久久色| 久久国产成人精品| 成人欧美一区二区三区在线湿哒哒| 永久免费av在线| 91麻豆精品国产91久久久久| 日本中文在线视频| 国产a视频精品免费观看| 日韩av新片网| 久久午夜影院| 国产精品av免费在线观看| 香蕉视频免费在线播放| 欧美一级电影网站| 精品无码人妻一区二区三区| 成人高清伦理免费影院在线观看| 欧美 国产 综合| 免费成人av| 国产在线精品自拍| 日本aa在线| 国产视频在线观看一区二区| 国产免费一区二区三区四区五区| 国产精品久久久久天堂| 国产又黄又嫩又滑又白| 最新成人av网站| 日本视频精品一区| 精品国产鲁一鲁****| 91高清视频免费观看| 在线国产91| 精品久久国产字幕高潮| 丁香六月婷婷综合| 国产精品久久久久久久岛一牛影视 | 日韩电影第一页| 中文字幕+乱码+中文| 亚洲免费av在线| www.自拍偷拍| 九九国产精品视频| 久久视频这里有精品| 日韩大片在线观看| 国产精品亚洲综合| 国语自产精品视频在线看抢先版结局| 精品少妇一区二区30p| 久蕉依人在线视频| 亚洲高清av在线| 亚洲中文无码av在线| 亚洲一区在线观看视频| 亚洲а∨天堂久久精品2021| 懂色av一区二区三区免费观看| 熟妇人妻无乱码中文字幕真矢织江 | 国产视频综合在线| 国产成人精品亚洲精品色欲| 色呦呦国产精品| 久久免费在线观看视频| 国产精品伦一区二区三级视频| 亚洲视频在线播放免费| 精品亚洲国产成人av制服丝袜 | 免费观看黄色的网站| 色天天色综合| 99超碰麻豆| 国产成人免费av一区二区午夜 | 日韩免费视频播放| 亚洲一区二区三区| 免费一区二区三区| 国产+成+人+亚洲欧洲在线 | 国产熟女一区二区三区四区| 黑人巨大精品欧美一区二区三区 | 四虎永久免费影院| 国产jizzjizz一区二区| 午夜免费视频网站| 麻豆成人久久精品二区三区小说| 北条麻妃69av| 亚洲国产精品一区制服丝袜| 99中文字幕在线观看| 日韩久久精品| 日本不卡一区二区三区视频| 欧美电影在线观看免费| 国产福利不卡| 亚洲精品v亚洲精品v日韩精品| 国产主播精品在线| 久久99国产精品二区高清软件| 国产国语videosex另类| 国产精品粉嫩| 欧洲永久精品大片ww免费漫画| ****av在线网毛片| 欧美精品精品精品精品免费| 污污在线观看| 欧美另类极品videosbestfree| 婷婷激情在线| 日韩午夜在线视频| 美女免费久久| 久久人体大胆视频| 久久bbxx| 欧美高清电影在线看| 欧美xxxx免费虐| 欧美激情亚洲视频| 国产色播av在线| 欧美一区亚洲一区| 欧美7777| 国产精品久久久久7777婷婷| 8av国产精品爽爽ⅴa在线观看| 国产精品第8页| 国产a亚洲精品| 成人精品aaaa网站| 伊人久久影院| 久久精品第九区免费观看| 日韩欧美黄色| 视频一区二区三区免费观看| 日韩国产综合| 中国女人做爰视频| 在线欧美一区| 久草在在线视频| 久久精品久久综合| 国产精品久久久久野外| 99久久综合精品| 91激情视频在线观看| 一区在线播放视频| 国产一级片免费看| 日韩欧美成人精品| 亚洲一区二区三区网站| 日韩欧美一级二级三级| 天堂网www中文在线| 一二美女精品欧洲| a毛片在线看免费观看| 97精品国产97久久久久久| 欧美最新精品| 99中文字幕| 国产一区二区三区四区大秀| 一区在线电影| 国产精品美女| 在线观看国产福利| 99综合电影在线视频| 国产一二三四视频| 亚洲韩国精品一区| 在线观看国产区| 亚洲第一精品福利| 国产免费永久在线观看| 欧美风情在线观看| 午夜久久中文| 99高清视频有精品视频| 自拍自偷一区二区三区| 国产成人精品免费看在线播放| 国产日韩视频| 久久精品久久99| 久久免费电影网| 久久久久香蕉视频| 欧美伊人久久久久久午夜久久久久| 精品女同一区二区三区| 亚洲欧美在线x视频| 羞羞视频在线观看免费| 国产精品a久久久久久| 亚洲视频一起| 一区二区三区精品国产| 先锋亚洲精品| 91亚洲一线产区二线产区| 国产欧美一二三区| 日韩大片免费在线观看| 6080午夜不卡| av网站在线免费播放| 97视频在线观看亚洲| 欧美高清一级片| 一区二区三区四区五区视频| 99riav1国产精品视频| 乱码一区二区三区| 中文字幕欧美一| 无码一区二区三区在线观看| 亚洲国产精品电影在线观看| www在线观看播放免费视频日本| 国产精品大片wwwwww| 欧美日韩精品一区二区三区在线观看| 久久精品国产精品亚洲精品色| 日韩国产欧美在线播放| 黄色性生活一级片| 亚洲图片有声小说| 性欧美videos另类hd| 久久视频中文字幕| 日本久久二区| 亚洲人成网站在线观看播放| 久久一区二区三区超碰国产精品| 第四色在线视频| 亚洲www啪成人一区二区麻豆| 高h放荡受浪受bl| 色综合男人天堂| 日本在线视频一区二区三区| 亚洲一区精彩视频| 久久精品国产久精国产爱| 国产精品www爽爽爽| 在线精品亚洲一区二区不卡| 日本成人一区| 日本最新高清不卡中文字幕| 任你弄精品视频免费观看| 日本网站免费在线观看| 97久久超碰精品国产| 男女啊啊啊视频| 日韩精品视频中文在线观看| 日韩精品极品| 免费观看成人在线| 久久婷婷久久| 日韩免费成人av| 欧美日韩激情一区二区三区| 免费大片黄在线| 7777精品久久久大香线蕉小说| 欧美女激情福利| 99re这里只有| 欧美视频中文字幕在线| 国产中文在线视频| 国产美女精品视频免费观看| 欧美激情理论| 午夜诱惑痒痒网| 午夜伦理一区二区| 你懂的视频在线免费| 国产精品亚洲网站| 亚洲91中文字幕无线码三区| 两女双腿交缠激烈磨豆腐| 亚洲午夜一区二区| 五月婷在线视频| 国产精品丝袜久久久久久不卡| 99精品全国免费观看视频软件| 国模大尺度视频| 欧美日韩国产在线| caoporn国产精品免费视频| 国产主播欧美精品| 亚洲国产日本| av手机在线播放| 欧美一级日韩免费不卡| 久久男人av资源站| 小说区图片区图片区另类灬| 国产精品一品视频| 欧产日产国产69| 久久中国妇女中文字幕| 久久久久观看| 中日韩av在线播放| 五月天中文字幕一区二区| 粉嫩av在线播放| 成人资源视频网站免费| 日韩精品乱码免费| 久草网在线观看| 亚洲性生活视频在线观看| 日韩精品成人| 九色porny91| 亚洲va欧美va人人爽| 日韩伦理在线观看| 精品久久久久亚洲| 韩国女主播成人在线| 日韩黄色一级大片| 久久久国产精品x99av| 亚洲三级网页| 日韩精品――色哟哟| 欧美色图第一页|