大家好,由于这段时间比较忙,好久不更了,现在给大家介绍以下go的jsonrpc用法,理论原理不多说,我个人认为看着代码的注释去理解原理是最好的
(1) 服务端代码
package mainimport ( "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}// Servetype 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 mainimport ( "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
你会有意外惊喜哦
本文分享自微信公众号 - Golang基础教程(olongfen)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。