go::rpc

 

1、rpc
type HelloService struct{}
func (p *HelloService) Hello(request string, reply *string) error {
    *reply = "hello:" + request
    fmt.Println("got req", request)
    return nil
}
func main() {
    rpc.RegisterName("HelloService", new(HelloService))
    listener, err := net.Listen("tcp", ":1234")
    if err != nil {
        fmt.Println("ListenTCP error:", err)
    }
    rpc.Accept(listener)
}
func main() {
    client, err := rpc.Dial("tcp", "localhost:1234")
    if err != nil {
        fmt.Println(err)
    }
    defer client.close()
    var reply string
    err = client.Call("HelloService.Hello", "world", &reply)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(reply)
}

 

2、rpc使用json序列化

type HelloService struct{}
func (p *HelloService) User(stu Student, reply *string) error {
*reply = stu.Name + ", " + stu.School
fmt.Println("got req", stu)
return nil
}
func main() {
    rpc.RegisterName("HelloService", new(HelloService))
    listener, err := net.Listen("tcp", ":1234")
    if err != nil {
        fmt.Println("ListenTCP error:", err)
    }
    for {
        // 监听Client发送的请求
        conn, err2 := listener.Accept()
        if err2 != nil {
            continue
        }
        //go rpc.ServeConn(conn)
        //使用json序列化
        go rpc.ServeCodec(jsonrpc.NewServerCodec(conn))
    }
}
type Student struct {
    Name   string
    School string
}

func main() {
    conn, err := jsonrpc.Dial("tcp", "localhost:1234")
    if err != nil {
        fmt.Println(err)
    }
    defer conn.Close()

    var reply string
    err = conn.Call("HelloService.User", &Student{
        Name:   "xiaoming",
        School: "qh",
    }, &reply)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(reply)
}

 

3、rpc使用http

func (p *HelloService) User(stu Student, reply *string) error {
    *reply = stu.Name + ", " + stu.School
    fmt.Println("got req", stu)
    return nil
}
func main() {
    rpc.Register(new(HelloService))
    rpc.HandleHTTP()
    err := http.ListenAndServe(":1234", nil)
    if err != nil {
        fmt.Println(err)
    }
}
type Student struct {
    Name   string
    School string
}
func main() {
    conn, err := rpc.DialHTTP("tcp", "localhost:1234")
    if err != nil {
        fmt.Println(err)
    }
    defer conn.Close()

    var reply string
    err = conn.Call("HelloService.User", &Student{
        Name:   "xiaoming",
        School: "qh",
    }, &reply)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(reply)
}

 

posted @ 2019-05-27 23:02  osbreak  阅读(195)  评论(0编辑  收藏  举报