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