美文网首页折腾博客hexogo边开发边go
2019-11-01 从零开始go的rpc学习- 知识铺

2019-11-01 从零开始go的rpc学习- 知识铺

作者: 知识铺 | 来源:发表于2019-11-01 14:59 被阅读0次

    知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累。不占太多时间,不停地来唤醒记忆深处的知识点。
    一、 go 原生 rpc

    定义服务端:

    
    // 1. 定义实体类型
    type Gstus struct {}
    
    
    /*
       2. 定义service fun
    Go语言的RPC规则:方法只能有两个可序列化的参数,
                     其中第二个参数是指针类型,
                    并且返回一个error类型,同时必须是公开的方法
    */
    func (p Gstus) Printgs(request string, reply *string) error {
        *reply = "ok:"+request
        return nil
    }
    
    func main() {
        // 3. 注册
        rpc.RegisterName("tgs",new(Gstus))
    
        listener, err := net.Listen("tcp", ":1234")
        if err != nil {
            log.Fatal("ListenTCP error:", err)
        }
    
        conn, err := listener.Accept()
        if err != nil {
            log.Fatal("Accept error:", err)
        }
    
        // 4. 开启服务端 并监听注册端口
        rpc.ServeConn(conn)
    
    }
    

    定义客户端

    package main
    
    import (
        "fmt"
        "log"
        "net/rpc"
    )
    
    func main() {
        client, err := rpc.Dial("tcp", "localhost:1234")
        if err != nil {
            log.Fatal("dialing:", err)
        }
    
        var reply string
        err = client.Call("tgs.Printgs", "hello", &reply)
        if err != nil {
            log.Fatal(err)
        }
    
        fmt.Println(reply)
    
    }
    

    结果:

    ok:hello
    

    推荐阅读:

    本文由zshipu.com学习笔记或整理或转载,如有侵权请联系,必改之。

    相关文章

      网友评论

        本文标题:2019-11-01 从零开始go的rpc学习- 知识铺

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