如何进行Go jsonrpc

发布时间:2021-12-13 18:27:32 作者:柒染
来源:亿速云 阅读:205

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

推荐阅读:
  1. 利用ZABBIX进行服务器自动巡检并导出报表
  2. Go语言开发(十六)、Go语言常用标准库六

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jsonrpc go

上一篇:如何读取yaml,json,ini等配置文件

下一篇:GeoJSON坐标和WKT的转换是怎样的

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》