rpc:服务/方法请求格式不正确

问题描述 投票:0回答:1

我非常喜欢RPC,但我似乎无法弄清楚是什么导致我的客户感到恐慌:

2020/01/04 14:34:29 rpc:服务/方法请求格式错误:API:问候语

这是我的客户的样子:

main.go

func main() {
    serverAddress := "localhost"
    serverPort := "4040"

    client, err := rpc.DialHTTP("tcp", serverAddress+":"+serverPort)
    if err != nil{
        log.Fatal(err)
    }

    fmt.Println("start")
    var results string

    a := "www.google.com"
    err = client.Call("API:Greeting", a, &results)

    if err != nil{
        log.Fatal(err)
    }

    fmt.Println(results)
    fmt.Println("end")
}

这是我的服务器的外观(在另一个项目上):

main.go

package main
import (
    "fmt"
    "log"
    "net"
    "net/http"
    "net/rpc"
)

type API int

func (api *API) Greeting(empty string, result *string) error {
    fmt.Println("called Greeting")
    *result = "Hello"
    fmt.Println("returning Greeting")
    return nil
}

func main() {
    serverPort := "8080"
    api := new(API)
    err := rpc.Register(api)
    if err != nil {
        log.Fatal("error registering API", err)
    }

    rpc.HandleHTTP()

    listener, err := net.Listen("tcp", ":"+serverPort)

    if err != nil {
        log.Fatal("Listener error", err)
    }
    log.Printf("serving rpc on port %s", serverPort)
    err = http.Serve(listener, nil)

    if err != nil {
        log.Fatal("error serving: ", err)
    }
}

如果有人能指出我在做什么错,那将是很棒的。

go rpc
1个回答
0
投票

我相信您必须像这样调用远程过程:

client.Call("API.Greeting", a, &results)

注意Object.Method表示法,而不是Object:Method

© www.soinside.com 2019 - 2024. All rights reserved.