zoukankan      html  css  js  c++  java
  • GO RPC

    HTTP RPC

    SERVER CODE

    package main
    
    import (
    "errors"
    "fmt"
    "net/http"
    "net/rpc"
    )
    
    const (
        URL = "192.168.2.172:12981"
    )
    
    type Args struct {
        A, B int
    }
    
    type Quotient struct {
        Quo, Rem int
    }
    
    type Arith int
    
    func (t *Arith) Multiply(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)
        rpc.HandleHTTP()
    
        err := http.ListenAndServe(URL, nil)
        if err != nil {
            fmt.Println(err.Error())
        }
    }
    

     client code

    package main
    
    import (
        "fmt"    
        "net/rpc”
    )
    
    const (
        URL = "192.168.2.172:12982"
    )
    
    func main() {
    
        client, err := rpc.DialHTTP("tcp", URL)
        if err != nil {
            fmt.Println(err.Error())
        }
    
        args := Args{2, 4}
        var reply int
        err = client.Call("Arith.Multiply", &args, &reply)
    
        if err != nil {
            fmt.Println(err.Error())
        } else {
            fmt.Println(reply)
        }
    }   
    

     二 JSON-RPC

    server code

    package main
    
    import (
    "errors"
    "fmt"
    "net"
    "net/rpc"
    "net/rpc/jsonrpc"
    )
    
    const (
        URL= "192.168.2.172:12981"
    )
    
    type Args struct {
        A, B int
    }
    type Quotient struct {
        Quo, Rem int
    }
    
    type Arith int
    
    func (t *Arith) Multiply(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", URL)
        if err != nil {
            fmt.Println(err)
        }
        listener, err := net.ListenTCP("tcp", tcpAddr)
    
        for {
            conn, err := listener.Accept()
            if err != nil {
                continue
            }
            go jsonrpc.ServeConn(conn)
        }
    }
    

     client code

    package main
    
    import (
        "fmt"    
        "net/rpc”
    )
    
    const (
        URL = "192.168.2.172:12982"
    )
    
    func main() {
    
        client, err := jsonrpc.Dial("tcp", URL)
        defer client.Close()
    
        if err != nil {
            fmt.Println(err)
        }
    
        args := Args{7, 2}
        var reply int
        err = client.Call("Arith.Multiply", &args, &reply)
        if err != nil {
            fmt.Println(err)
        }
        fmt.Println(reply)  
    }
    
  • 相关阅读:
    bzoj1477: 青蛙的约会
    数论/the second wave
    bzoj2818: Gcd
    bzoj2705: [SDOI2012]Longge的问题
    数论/the first wave
    bzoj3942: [Usaco2015 Feb]Censoring
    BZOJ 1059: [ZJOI2007]矩阵游戏( 匈牙利 )
    BZOJ 1013: [JSOI2008]球形空间产生器sphere( 高斯消元 )
    BZOJ 1823: [JSOI2010]满汉全席( 2-sat )
    BZOJ 4260: Codechef REBXOR( trie )
  • 原文地址:https://www.cnblogs.com/freebird92/p/4852358.html
Copyright © 2011-2022 走看看