溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行Go jsonrpc

發(fā)布時間:2021-12-13 18:27:32 來源:億速云 閱讀:212 作者:柒染 欄目:大數據

今天就跟大家聊聊有關如何進行Go jsonrpc,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

大家好,由于這段時間比較忙,好久不更了,現在給大家介紹以下go的jsonrpc用法,理論原理不多說,我個人認為看著代碼的注釋去理解原理是最好的

(1)  服務端代碼

package main
import (
  "fmt"
  "log"
  "net"
  "net/rpc"
  "net/rpc/jsonrpc"
  "os"
)

// Resp 返回值結構體
type Resp struct {
  Country   string
  Province  string
  City      string
  Latitude  float64
  Longitude float64
  TimeZone  string
  Data      string
}

// Serve
type Serve struct {
}

// 參數結構體
type Agrs struct {
  IpString string
  Data     string
}

//json rpc 處理請求
// GetData 獲取數據
func (s *Serve) GetData(agr Agrs, res *Resp) error {
  res.City = "南寧"
  res.Province = "廣西"
  res.Country = "中國"
  res.Latitude = 888.888
  res.Longitude = 111.111
  res.TimeZone = "ssss"
  res.Data = agr.Data // 返回你傳的數據
  return nil
}

func main() {
  // 初始化jsonRPC
  serve := &Serve{}
  // 注冊服務
  rpc.Register(serve)
  //綁定端口
  address := "127.0.0.1:8080"
  tcpAddr, err := net.ResolveTCPAddr("tcp", address)
  checkError(err)
  listener, err := net.ListenTCP("tcp", tcpAddr)
  checkError(err)
  log.Println("json rpc is listening", tcpAddr)
  // 一直連接
  for {
     conn, err := listener.Accept()
     if err != nil {
        continue
     }
     go jsonrpc.ServeConn(conn)
  }

}

// 驗證錯誤
func checkError(err error) {
  if err != nil {
     fmt.Println("Fatal error ", err.Error())
     os.Exit(1)
  }
}

(2) 客戶端代碼

package main
import (
  "fmt"
  "log"
  "net/rpc"
  "net/rpc/jsonrpc"
)

type Response struct {
  Country   string
  Province  string
  City      string
  Latitude  float64
  Longitude float64
  TimeZone  string
  Data      string
}
type Client struct {
  *rpc.Client
}

type agrs struct {
  IpString string
  Data     string
}

func main() {
  var (
     c   = new(Client)
     err error
  )
  if c.Client, err = jsonrpc.Dial("tcp", "127.0.0.1:8080"); err != nil {
     log.Fatal("dialing:", err)
  }
  // Synchronous call
  var res Response
  var a agrs
  a.IpString = "219.140.227.235"
  a.Data = "is my data"
  err = c.Call("Serve.GetData", &a, &res)
  if err != nil {
     log.Fatal("ip2addr error:", err)
  }
  fmt.Println(res)

}

(3) 運行

     運行server.go

    然后運行client.go 

    你會有意外驚喜哦

看完上述內容,你們對如何進行Go jsonrpc有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI