美文网首页
go实现rpc

go实现rpc

作者: 耍帅oldboy | 来源:发表于2022-10-12 11:09 被阅读0次

    1、服务端

    package main
    
    import (
        "fmt"
        "net"
        "net/http"
        "net/rpc"
    )
    
    type Server struct {
    }
    
    type Req struct {
        NumOne int
        NumTow int
    }
    
    type Res struct {
        Num int
    }
    
    func (s *Server) Add(req Req, res *Res) error {
        res.Num = req.NumOne + req.NumTow
        return nil
    }
    
    func main() {
        rpc.Register(new(Server))
        rpc.HandleHTTP()
        l, err := net.Listen("tcp", ":8888")
        if err != nil {
            fmt.Println(err)
            return
        }
        http.Serve(l, nil)
    }
    
    

    2、客户端

    package main
    
    import (
        "fmt"
        "net/rpc"
    )
    
    type Req struct {
        NumOne int
        NumTow int
    }
    
    type Res struct {
        Num int
    }
    
    func main() {
        req := Req{
            NumOne: 1,
            NumTow: 2,
        }
        var res Res
        client, err := rpc.DialHTTP("tcp", "127.0.0.1:8888")
        if err != nil {
            fmt.Println(err)
            return
        }
        // 同步调用
        //client.Call("Server.Add", req, &res)
        //fmt.Println(res)
        //异步调用
        ca := client.Go("Server.Add", req, &res, nil)
        for {
            select {
            case <-ca.Done:
                fmt.Println(res)
                return
            default:
                fmt.Println("处理别的任务")
            }
        }
    
    }
    
    
    

    相关文章

      网友评论

          本文标题:go实现rpc

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