您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        今天就跟大家聊聊有关如何进行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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。