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

首頁 > 編程 > Golang > 正文

go語言net包rpc遠程調用的使用示例

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

rpc 包提供了一個方法來通過網絡或者其他的I/O連接進入對象的外部方法. 一個server注冊一個對象, 標記它成為可見對象類型名字的服務。注冊后,對象的外部方法就可以遠程調用了。一個server可以注冊多個 不同類型的對象,但是卻不可以注冊多個相同類型的對象。

只有滿足這些標準的方法才會被遠程調用視為可見;其他的方法都會被忽略:

- 方法是外部可見的。
- 方法有兩個參數,參數的類型都是外部可見的。
- 方法的第二個參數是一個指針。
- 方法有返回類型錯誤

一、基于http的RPC

服務端:

package main; import (  "net/rpc"  "net/http"  "log") //go對RPC的支持,支持三個級別:TCP、HTTP、JSONRPC//go的RPC只支持GO開發的服務器與客戶端之間的交互,因為采用了gob編碼 //注意字段必須是導出type Params struct {  Width, Height int;} type Rect struct{} //函數必須是導出的//必須有兩個導出類型參數//第一個參數是接收參數//第二個參數是返回給客戶端參數,必須是指針類型//函數還要有一個返回值errorfunc (r *Rect) Area(p Params, ret *int) error {  *ret = p.Width * p.Height;  return nil;} func (r *Rect) Perimeter(p Params, ret *int) error {  *ret = (p.Width + p.Height) * 2;  return nil;} func main() {  rect := new(Rect);  //注冊一個rect服務  rpc.Register(rect);  //把服務處理綁定到http協議上  rpc.HandleHTTP();  err := http.ListenAndServe(":8080", nil);  if err != nil {    log.Fatal(err);  }} 

客戶端:

package main; import (  "net/rpc"  "log"  "fmt") type Params struct {  Width, Height int;} func main() {  //連接遠程rpc服務  rpc, err := rpc.DialHTTP("tcp", "127.0.0.1:8080");  if err != nil {    log.Fatal(err);  }  ret := 0;  //調用遠程方法  //注意第三個參數是指針類型  err2 := rpc.Call("Rect.Area", Params{50, 100}, &ret);  if err2 != nil {    log.Fatal(err2);  }  fmt.Println(ret);  err3 := rpc.Call("Rect.Perimeter", Params{50, 100}, &ret);  if err3 != nil {    log.Fatal(err3);  }  fmt.Println(ret);} 

二、基于tcp的RPC

服務端:

package main; import (  "net"  "log"  "net/rpc") //注意字段必須是導出type Params struct {  Width, Height int;} type Rect struct{} func (r *Rect) Area(p Params, ret *int) error {  *ret = p.Width * p.Height;  return nil;} func (r *Rect) Perimeter(p Params, ret *int) error {  *ret = (p.Width + p.Height) * 2;  return nil;} func chkError(err error) {  if err != nil {    log.Fatal(err);  }} func main() {  rect := new(Rect);  //注冊rpc服務  rpc.Register(rect);  //獲取tcpaddr  tcpaddr, err := net.ResolveTCPAddr("tcp4", "127.0.0.1:8080");  chkError(err);  //監聽端口  tcplisten, err2 := net.ListenTCP("tcp", tcpaddr);  chkError(err2);  //死循環處理連接請求  for {    conn, err3 := tcplisten.Accept();    if err3 != nil {      continue;    }    //使用goroutine單獨處理rpc連接請求    go rpc.ServeConn(conn);  }} 

客戶端: 

package main; import (  "net/rpc"  "fmt"  "log") type Params struct {  Width, Height int;} func main() {  //連接遠程rpc服務  //這里使用Dial,http方式使用DialHTTP,其他代碼都一樣  rpc, err := rpc.Dial("tcp", "127.0.0.1:8080");  if err != nil {    log.Fatal(err);  }  ret := 0;  //調用遠程方法  //注意第三個參數是指針類型  err2 := rpc.Call("Rect.Area", Params{50, 100}, &ret);  if err2 != nil {    log.Fatal(err2);  }  fmt.Println(ret);  err3 := rpc.Call("Rect.Perimeter", Params{50, 100}, &ret);  if err3 != nil {    log.Fatal(err3);  }  fmt.Println(ret);} 

三、JSON RPC 方式

jsonrpc方式是數據編碼采用了json,而不是gob編碼。

服務端:

package main; import (  "net"  "log"  "net/rpc"  "net/rpc/jsonrpc") //注意字段必須是導出type Params struct {  Width, Height int;} type Rect struct{} func (r *Rect) Area(p Params, ret *int) error {  *ret = p.Width * p.Height;  return nil;} func (r *Rect) Perimeter(p Params, ret *int) error {  *ret = (p.Width + p.Height) * 2;  return nil;} func chkError(err error) {  if err != nil {    log.Fatal(err);  }} func main() {  rect := new(Rect);  //注冊rpc服務  rpc.Register(rect);  //獲取tcpaddr  tcpaddr, err := net.ResolveTCPAddr("tcp4", "127.0.0.1:8080");  chkError(err);  //監聽端口  tcplisten, err2 := net.ListenTCP("tcp", tcpaddr);  chkError(err2);  for {    conn, err3 := tcplisten.Accept();    if err3 != nil {      continue;    }    //使用goroutine單獨處理rpc連接請求    //這里使用jsonrpc進行處理    go jsonrpc.ServeConn(conn);  }} 

客戶端:

 package main; import (  "fmt"  "log"  "net/rpc/jsonrpc") type Params struct {  Width, Height int;} func main() {  //連接遠程rpc服務  //這里使用jsonrpc.Dial  rpc, err := jsonrpc.Dial("tcp", "127.0.0.1:8080");  if err != nil {    log.Fatal(err);  }  ret := 0;  //調用遠程方法  //注意第三個參數是指針類型  err2 := rpc.Call("Rect.Area", Params{50, 100}, &ret);  if err2 != nil {    log.Fatal(err2);  }  fmt.Println(ret);  err3 := rpc.Call("Rect.Perimeter", Params{50, 100}, &ret);  if err3 != nil {    log.Fatal(err3);  }  fmt.Println(ret);} 

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91九色国产视频| 伊人伊成久久人综合网站| 最近的2019中文字幕免费一页| 日本高清视频精品| www.亚洲人.com| 欧美最猛黑人xxxx黑人猛叫黄| 欧美久久精品一级黑人c片| 中文字幕日韩在线视频| 日韩中文有码在线视频| xx视频.9999.com| 亚洲欧美精品一区| 国产精品看片资源| 日韩男女性生活视频| 亚洲人高潮女人毛茸茸| 精品中文字幕在线观看| 91黄色8090| 91大神福利视频在线| 亚洲xxxx3d| 最近2019年中文视频免费在线观看| 亚洲欧美制服另类日韩| 亚洲国产91精品在线观看| 91在线免费网站| 国产美女久久精品香蕉69| 97国产精品久久| 国内精品一区二区三区四区| 国产suv精品一区二区| 亚洲一区二区免费| 亚洲国产欧美一区二区三区久久| 久热精品视频在线免费观看| 国产在线视频不卡| 4438全国成人免费| 国产亚洲欧美aaaa| 亚洲精品久久久久久久久久久久久| 欧美激情2020午夜免费观看| 亚洲色图18p| 久久视频精品在线| 91精品免费久久久久久久久| 精品视频在线播放| 国产成人欧美在线观看| 亚洲а∨天堂久久精品喷水| 九九视频这里只有精品| 欧美成人黄色小视频| 日韩精品在线视频美女| 国产精品自产拍在线观| 欧美激情a在线| 亚洲激情免费观看| 欧美疯狂xxxx大交乱88av| 欧美精品免费在线观看| 久久久久亚洲精品成人网小说| 国产精品久久久久99| 亚洲欧美日韩网| 日本久久久a级免费| 国产有码一区二区| 亚洲精品日韩久久久| 国产做受69高潮| 国产69精品久久久久9| 国产精品久久久久久久久免费| 国产亚洲一区二区精品| 韩国福利视频一区| 全亚洲最色的网站在线观看| 精品久久久久久亚洲国产300| 国产精品久久久久久av福利软件| 欧美日韩亚洲国产一区| 欧美性猛交xxxx富婆弯腰| 欧美激情国内偷拍| 久久这里有精品视频| 97国产精品免费视频| 久久精品国产亚洲精品| 亚洲美女www午夜| 国产欧美日韩91| 久久免费视频观看| 亚洲午夜精品久久久久久久久久久久| 国产91精品黑色丝袜高跟鞋| 日韩中文字幕在线播放| 91色在线视频| 久久久久国产精品www| 成人中文字幕+乱码+中文字幕| 亚洲福利视频网站| 亚洲免费小视频| 91老司机精品视频| 亚洲成人三级在线| 国产精品专区一| 亚洲最大在线视频| 日韩精品www| 亚洲乱码国产乱码精品精| 日韩在线观看免费全集电视剧网站| 亚洲欧美成人一区二区在线电影| 国产精品一区二区女厕厕| 亚洲视频在线观看视频| 精品无人区乱码1区2区3区在线| 91欧美激情另类亚洲| 91极品女神在线| 色综合久久中文字幕综合网小说| 国产精品va在线播放我和闺蜜| 亚洲精品国产精品国产自| yellow中文字幕久久| 国产一区二区三区视频在线观看| 色综合色综合网色综合| 成人免费看吃奶视频网站| 久久成人一区二区| 亚洲精品久久久一区二区三区| 神马国产精品影院av| 亚洲精品日韩久久久| 欧美亚洲在线观看| 国产成人av网| 美女啪啪无遮挡免费久久网站| 亚洲精品国产福利| 久久在线观看视频| 国内偷自视频区视频综合| 欧美专区第一页| 成人网中文字幕| 亚洲综合最新在线| 日韩风俗一区 二区| 欧美成人午夜影院| 色爱精品视频一区| 亚洲国产一区二区三区在线观看| 欧美尺度大的性做爰视频| 中文欧美日本在线资源| 九九九热精品免费视频观看网站| 日韩av免费看网站| 精品国产成人av| 国产午夜精品一区理论片飘花| 91香蕉嫩草神马影院在线观看| 欧美一区二区三区免费观看| 青青久久av北条麻妃海外网| 亚洲精品欧美一区二区三区| 欧美激情视频三区| 久久久久中文字幕2018| 伊人久久久久久久久久久久久| 国产玖玖精品视频| 亚洲人成网站色ww在线| 国产亚洲欧美日韩精品| 日韩在线免费视频| 欧美第一页在线| 日本国产一区二区三区| 国产97在线视频| 国模gogo一区二区大胆私拍| 久久久久久久久久久久久久久久久久av| 中文字幕亚洲一区在线观看| 成人精品视频99在线观看免费| 亚洲xxxx3d| 国产精品午夜国产小视频| 久久在线精品视频| 尤物九九久久国产精品的特点| 亚洲欧美成人网| 亚洲成人久久一区| 亚洲美女av黄| 欧美日韩美女在线观看| 亚洲精品福利免费在线观看| 国产一区二区三区在线观看网站| 久久九九精品99国产精品| 日韩女优在线播放| 精品av在线播放| 日韩av网址在线观看| 在线看国产精品| 亚洲国产精品va在看黑人| 欧美成人免费观看| 国产精品免费一区| 色妞欧美日韩在线| 精品福利视频导航| 久久久久久久一区二区三区| 成人激情视频在线播放| 伊人亚洲福利一区二区三区| 日本一区二三区好的精华液|