Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
71 lines (55 sloc) 1.56 KB

RPC 客户端

这节,您将看到被存为 RPCclient.go 的 RPC 客户端代码,它被分为四部分进行讲解。

RPCclient.go 的第一部分:

package main

import (
    "fmt"
    "net/rpc"
    "os"
    "sharedRPC"
)

RPCclient.go 第二部分包含的代码如下:

func main() {
    arguments := os.Args
    if len(arguments) == 1 {
        fmt.Println("Please provide a host:port sting!")
        return
    }

    CONNECT := arguments[1]
    c, err := rpc.Dial("tcp", CONNECT)
    if err != nil {
        fmt.Println(err)
        return
    }

注意,尽管 RPC 服务器使用 TCP,但使用 rpc.Dial() 函数代替 net.Dial() 连接 RPC 服务器。

RPCclient.go 的第三部分如下:

    args := sharedRPC.MyFloats(16, -0.5)
    var reply float64

    err = c.Call("MyInterface.Multiply", args, &reply)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("Reply (Multiply): %f\n", reply)

RPC 客户端和 RPC 服务器之间通过 Call() 函数交换函数名,参数和函数返回结果,而 RPC 客户端对函数的具体实现一无所知。

RPCclient.go 的其余代码如下:

    err = c.Call("MyInterface.Power", argus, &reply)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("Reply (Power): %f\n", reply)
}

如果您试图在没有一个运行的 RPC 服务器的情况下执行 RPCclient.go 将会得到如下错误信息:

$ go run RPCclient.go localhost:1234
dial tcp [::1]:1234: connect: connection refused
You can’t perform that action at this time.