返回介绍

13.7.1 RPC 客户端

发布于 2024-08-14 12:50:31 字数 2813 浏览 0 评论 0 收藏 0

这节,您将看到被存为 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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文