go json rpc

作者: ebayboy | 来源:发表于2018-06-21 14:02 被阅读0次

//server.go

package main

import (

    "errors"

    "fmt"

    "net"

    "net/rpc"

    "net/rpc/jsonrpc"

    "os"

)

type Args struct {

    A, B int

}

func checkError(err error) {

    if err != nil {

        fmt.Fprint(os.Stderr, "Usage: %s", err.Error())

        os.Exit(1)

    }

}

type Quotient struct {

    Quo, Rem int

}

type Arith int

func (t *Arith) Muliply(args *Args, reply *int) error {

    *reply = args.A * args.B

    return nil

}

func (t *Arith) Divide(args *Args, quo *Quotient) error {

    if args.B == 0 {

        return errors.New("divide by zero")

    }

    quo.Quo = args.A * args.B

    quo.Rem = args.A / args.B

    return nil

}

func main() {

    arith := new(Arith)

    rpc.Register(arith)

    tcpAddr, err := net.ResolveTCPAddr("tcp", ":1234")

    checkError(err)

    Listener, err := net.ListenTCP("tcp", tcpAddr)

    checkError(err)

    for {

        conn, err := Listener.Accept()

        if err != nil {

            fmt.Fprint(os.Stderr, "accept err: %s", err.Error())

            continue

        }

        jsonrpc.ServeConn(conn)

    }

}

//client.go

package main

import (

    "fmt"

    "net/rpc/jsonrpc"

    "os"

)

type Args struct {

    A, B int

}

type quo struct {

    Quo, Rem int

}

func main() {

    service := "127.0.0.1:1234"

    client, err := jsonrpc.Dial("tcp", service)

    if err != nil {

        fmt.Println("dial error:", err)

        os.Exit(1)

    }

    args := Args{1, 2}

    var reply int

    err = client.Call("Arith.Muliply", args, &reply)

    if err != nil {

        fmt.Println("Arith.Muliply call error:", err)

        os.Exit(1)

    }

    fmt.Println("the arith.mutiply is :", reply)

    var quto quo

    err = client.Call("Arith.Divide", args, &quto)

    if err != nil {

        fmt.Println("Arith.Divide call error:", err)

        os.Exit(1)

    }

    fmt.Println("the arith.devide is :", quto.Quo, quto.Rem)

}

相关文章

  • go json rpc

    //server.go package main import ( "errors" "fmt" "n...

  • #知识学习之Json-RPC

    知识学习之Json-RPC JSON-RPC技术 JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议...

  • json-rpc

    json-rpc 是 rpc 通信过程中定义的一套 json 格式标准,最早是 json-rpc1.0,最新是 j...

  • ethereum rpc 调用分析

    以太坊以JSON RPC的方式提供API service。本文将从go-ethereum源码中挖掘服务端如何提供J...

  • Go RPC

    Go RPC Go 原生的网络RPC需要关联Go的net框架和库内容(net,tpc,http等等) 理论 总体来...

  • grpc

    Go的RPC标准库 简单使用 Go语言标准库(net/rpc)的RPC规则:方法只能有两个可序列化的参数,其中第二...

  • RPC、JSON-RPC 以及 JSON

    区块链钱包相关资源记录 1.1 Bitcoin 1.1.1 RPC Original Bitcoin client...

  • [Go基础]Json在Go中的使用

    前言 本文主要根据Go语言Json包[1]、官方提供的Json and Go[2]和go-and-json[3]整...

  • golang中的net/rpc包

    本文先介绍RPC,然后go原生对RPC的使用,之后是介绍go语言中有哪些RPC框架以及一些其他常见的框架,最后是探...

  • go-zero开发-rpc

    通过修改go-zero rpc的模板 下方指令用于生成rpc服务

网友评论

    本文标题:go json rpc

    本文链接:https://www.haomeiwen.com/subject/wdwxyftx.html