您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何進行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有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。