成都网站建设设计

将想法与焦点和您一起共享

如何进行Gojsonrpc

今天就跟大家聊聊有关如何进行Go jsonrpc,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

海门网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、自适应网站建设等网站项目制作,到程序开发,运营维护。成都创新互联从2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联

大家好,由于这段时间比较忙,好久不更了,现在给大家介绍以下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有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


网站名称:如何进行Gojsonrpc
网页URL:http://chengdu.cdxwcx.cn/article/jpccec.html