【问题标题】:service/method request ill-formed服务/方法请求格式错误
【发布时间】:2020-01-04 12:11:11
【问题描述】:

我是新来的 RPC,我似乎无法弄清楚是什么导致我的客户恐慌:

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

这是我的客户的样子:

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】:

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

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

    注意Object.Method 符号,而不是Object:Method

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多