golang-rpc

作者: AEGQ | 来源:发表于2017-11-05 13:07 被阅读201次

    参考


    示例


    • server
    package main
    
    import (
        "errors"
        "net"
        "net/rpc"
        "log"
        "net/http"
    )
    
    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()
        l, e := net.Listen("tcp", ":1234")
        if e != nil {
            log.Fatal("listen error:", e)
        }
        http.Serve(l, nil)
    }
    
    • client
    package main
    
    import (
        "net/rpc"
        "log"
        "fmt"
    )
    
    type Args struct {
        A, B int
    }
    
    type Quotient struct {
        Quo, Rem int
    }
    
    func main()  {
        client, err := rpc.DialHTTP("tcp", "127.0.0.1:1234")
        if err != nil {
            log.Fatal("dialing:", err)
        }
    
        // Synchronous call
        args := &Args{7,8}
        var reply int
        err = client.Call("Arith.Multiply", args, &reply)
        if err != nil {
            log.Fatal("arith error:", err)
        }
        fmt.Printf("Arith: %d*%d=%d\n", args.A, args.B, reply)
    
        // Asynchronous call
        quotient := new(Quotient)
        divCall := client.Go("Arith.Divide", args, quotient, nil)
        replyCall := <-divCall.Done // will be equal to divCall
        if replyCall.Error != nil {
            log.Fatal("arith error:", replyCall.Error)
        }
        fmt.Printf("Arith: %d/%d=%d...%d", args.A, args.B, quotient.Quo, quotient.Rem)
        // check errors, print, etc.
    }
    

    相关文章

      网友评论

        本文标题:golang-rpc

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