亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

golang中的net/rpc包使用概述(小結)

2020-04-01 19:02:01
字體:
來源:轉載
供稿:網友

RPC,即 Remote Procedure Call(遠程過程調用),說得通俗一點就是:調用遠程計算機上的服務,就像調用本地服務一樣。
我的項目是采用基于Restful的微服務架構,隨著微服務之間的溝通越來越頻繁,消耗的系統資源越來越多,于是乎就希望可以改成用rpc來做內部的通訊,對外依然用Restful。于是就想到了golang/118375.html">golang/196404.html">golang標準庫的rpc包和google的grpc。

這篇文章重點了解一下golang的rpc包。

介紹

golang的rpc支持三個級別的RPC:TCP、HTTP、JSONRPC。但Go的RPC包是獨一無二的RPC,它和傳統的RPC系統不同,它只支持Go開發的服務器與客戶端之間的交互,因為在內部,它們采用了Gob來編碼。

Go RPC的函數只有符合下面的條件才能被遠程訪問,不然會被忽略,詳細的要求如下:

  1. 函數必須是導出的(首字母大寫)
  2. 必須有兩個導出類型的參數,
  3. 第一個參數是接收的參數,第二個參數是返回給客- 戶端的參數,第二個參數必須是指針類型的
  4. 函數還要有一個返回值error

舉個例子,正確的RPC函數格式如下:

func (t *T) MethodName(argType T1, replyType *T2) error

T、T1和T2類型必須能被encoding/gob包編解碼。

示例

舉一個http的例子。

下面是http服務器端的代碼:

package mainimport (  "errors"  "net"  "net/rpc"  "log"  "net/http")type Args struct {  A, B int}type Quotient struct {  Quo, Rem int}type Arith intfunc (t *Arith) Multiply(args *Args, reply *int) error {  *reply = args.A * args.B  return nil}func (t *Arith) Divide(args *Args, quo *Quotient) error {  if args.B == 0 {    return errors.New("divide by zero")  }  quo.Quo = args.A / args.B  quo.Rem = args.A % args.B  return nil}func main() {  arith := new(Arith)  rpc.Register(arith)  rpc.HandleHTTP()  l, e := net.Listen("tcp", ":1234")  if e != nil {    log.Fatal("listen error:", e)  }  http.Serve(l, nil)}

簡單分析一下上面的例子,先實例化了一個Arith對象arith,然后給arith注冊了rpc服務,然后把rpc掛載到http服務上面,當http服務打開的時候我們就可以通過rpc客戶端來調用arith中符合rpc標準的的方法了。

請看客戶端的代碼:

package mainimport (  "net/rpc"  "log"  "fmt")type Args struct {  A, B int}type Quotient struct {  Quo, Rem int}func main() {  client, err := rpc.DialHTTP("tcp", "127.0.0.1:1234")  if err != nil {    log.Fatal("dialing:", err)  }  // Synchronous call  args := &Args{7,8}  var reply int  err = client.Call("Arith.Multiply", args, &reply)  if err != nil {    log.Fatal("arith error:", err)  }  fmt.Printf("Arith: %d*%d=%d/n", args.A, args.B, reply)  // Asynchronous call  quotient := new(Quotient)  divCall := client.Go("Arith.Divide", args, quotient, nil)  replyCall := <-divCall.Done  // will be equal to divCall  if replyCall.Error != nil {    log.Fatal("arith error:", replyCall.Error)  }  fmt.Printf("Arith: %d/%d=%d...%d", args.A, args.B, quotient.Quo, quotient.Rem)  // check errors, print, etc.}

簡單說明下,先用rpc的DialHTTP方法連接服務器端,調用服務器端的函數就要使用Call方法了,Call方法的參數和返回值已經很清晰的表述出rpc整體的調用邏輯了。

我們把服務器端跑起來,再把客戶端跑起來,這時候客戶端會輸出:

Arith: 7*8=56Arith: 7/8=0...7

到此,整個rpc的調用邏輯就完成了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人免费在线观看| 91在线观看免费网站| 5278欧美一区二区三区| 色七七影院综合| 久久亚洲精品毛片| 4438全国成人免费| 国产精品亚洲自拍| 国产999精品久久久影片官网| 国产拍精品一二三| 亚洲香蕉av在线一区二区三区| 欧美亚洲成人网| 欧美日韩国产精品一区| 久久成人18免费网站| 国产精品无av码在线观看| 久久精品国产欧美激情| 亚洲免费影视第一页| 欧美午夜美女看片| 久久男人的天堂| 中文字幕亚洲字幕| 亚洲一区中文字幕在线观看| 国产一区二区三区高清在线观看| 国产亚洲免费的视频看| 97成人精品区在线播放| 日韩在线观看视频免费| 91av在线国产| 欧美激情精品在线| 黑人狂躁日本妞一区二区三区| 91精品综合久久久久久五月天| 国产日韩欧美日韩| 欧美日韩日本国产| 亚洲视频专区在线| 久久亚洲成人精品| 国产一区二区日韩| 国产精品99蜜臀久久不卡二区| 97精品久久久| 欧美一级在线播放| 伊人成人开心激情综合网| 麻豆成人在线看| 亚洲乱码一区av黑人高潮| 国产一区二区在线免费| 久久久影视精品| 欧美中在线观看| 深夜福利一区二区| 国产一区二区在线免费视频| 狠狠色狠狠色综合日日五| 久久精品久久精品亚洲人| 国产999在线观看| 国产suv精品一区二区三区88区| 国产精品影院在线观看| 91在线免费看网站| 伊人激情综合网| x99av成人免费| 国产精品都在这里| 亚洲欧美三级伦理| 97在线看福利| 在线视频一区二区| 久久av中文字幕| 国产精品极品在线| 国产精品九九九| 91高清视频免费观看| 欧美xxxx18国产| 久久久最新网址| 在线精品国产欧美| 日本精品久久电影| 久久视频免费在线播放| 久久精品91久久香蕉加勒比| 久久免费少妇高潮久久精品99| 欧美激情2020午夜免费观看| 国产在线不卡精品| 久久久久久久激情视频| 国产一区玩具在线观看| 国产精品久久久久久中文字| 欧美精品18videos性欧美| 国产精品欧美一区二区三区奶水| 日韩av高清不卡| 精品少妇v888av| 国产一区视频在线| 欧美日韩美女在线| 久久国产精品久久精品| 国产亚洲精品高潮| 青青精品视频播放| 久久中文字幕在线视频| 91精品国产综合久久久久久蜜臀| 欧美日韩国产成人在线| 久久深夜福利免费观看| 精品高清美女精品国产区| 中文字幕在线看视频国产欧美| 97香蕉超级碰碰久久免费软件| 不卡中文字幕av| 97国产一区二区精品久久呦| 91精品视频在线播放| 欧美多人乱p欧美4p久久| 91在线观看免费| 欧美中文字幕第一页| 日韩在线免费观看视频| 国产精品亚洲视频在线观看| 国产91av在线| 成人欧美一区二区三区黑人| 亚洲a中文字幕| 这里只有精品在线播放| 少妇高潮 亚洲精品| 美女撒尿一区二区三区| 国产精品亚洲网站| 欧美老女人www| 美日韩在线视频| 欧美一级淫片aaaaaaa视频| 久久精品99久久久久久久久| 日韩av影片在线观看| 欧美性xxxx在线播放| 日本亚洲欧美成人| 欧美极品在线播放| 中文字幕亚洲无线码在线一区| 日韩中文在线视频| 国产精品久久久久久一区二区| 97国产真实伦对白精彩视频8| 欧美成人剧情片在线观看| 国产精品揄拍一区二区| 国产日本欧美在线观看| 亚洲一区二区中文字幕| 人体精品一二三区| 亚洲色图第一页| 91美女片黄在线观看游戏| 国产主播喷水一区二区| 国产精品久久久久久久久久99| 国产精品99蜜臀久久不卡二区| 国产日韩在线免费| 久久久精品美女| 欧美超级免费视 在线| 亚洲精品成人网| 成人免费看吃奶视频网站| 亚洲天堂av女优| 日韩欧美999| 日韩成人中文字幕| 久久久久亚洲精品国产| 成人黄色在线播放| 久久久久久久国产精品| 国产精品第一第二| 欧美日韩中文字幕在线| 日韩精品视频免费专区在线播放| 91热福利电影| 日韩成人在线观看| 成人亲热视频网站| 亚洲女人被黑人巨大进入al| 91色在线观看| 欧美在线性爱视频| 日韩av快播网址| 国产精品美乳在线观看| 国产精品亚洲第一区| 精品少妇一区二区30p| 亚洲天堂成人在线视频| 亚洲精品成人av| 日韩美女av在线免费观看| 亚洲第一精品福利| 一区二区三区视频免费在线观看| 欧美有码在线观看| 久久久久久久电影一区| www.美女亚洲精品| 久久夜色精品国产欧美乱| 韩国国内大量揄拍精品视频| 欧美激情视频网址| 成人久久18免费网站图片| 欧美成人精品一区| xxx成人少妇69| 国产日韩欧美视频|