千家信息网

如何进行Go jsonrpc

发表于:2024-10-15 作者:千家信息网编辑
千家信息网最后更新 2024年10月15日,今天就跟大家聊聊有关如何进行Go jsonrpc,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。大家好,由于这段时间比较忙,好久不更了,现在给大
千家信息网最后更新 2024年10月15日如何进行Go jsonrpc

今天就跟大家聊聊有关如何进行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有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

0