折腾博客hexogo边开发边go

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

2019-11-01  本文已影响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学习笔记或整理或转载,如有侵权请联系,必改之。

上一篇下一篇

猜你喜欢

热点阅读