我非常喜欢RPC,但我似乎无法弄清楚是什么导致我的客户感到恐慌:
2020/01/04 14:34:29 rpc:服务/方法请求格式错误:API:问候语
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")
}
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)
}
}
如果有人能指出我在做什么错,那将是很棒的。
我相信您必须像这样调用远程过程:
client.Call("API.Greeting", a, &results)
注意Object.Method
表示法,而不是Object:Method
。