【问题标题】:Simple RPC server will not answer when my client connects当我的客户端连接时,简单的 RPC 服务器不会应答
【发布时间】:2014-03-21 00:38:22
【问题描述】:

我采用并改编了Golang RPC 中的示例,制作了一个简单的 RPC 服务器,作为我想要完成的实际任务的测试运行。但无论我尝试过什么,我最终都会让客户得到 ​​p>

2014/03/21 13:28:41 dialing: dial-http tcp MYPC:61740: unexpected HTTP response: 404 Not Found

我已经尝试在服务器上使用MYPC:0127.0.0.1:61470MYPC:61470 和该主题的其他变体。也曾在本地和两台不同的计算机上尝试过(注意我在 Windows 上使用 Go 1.2)。通常使用 Go,我发现它可以直接进行调试,但是这次即使阅读 rpc pacakge 的源代码也无济于事 - 但是我确实掌握了 :0 提供可用端口的技巧。

只需运行exe即可运行Server,Client可以使用服务器输出的端口chat -c -server=127.0.0.1:8082运行。

以下代码实际上有什么问题?

package main

import (
"flag"
"log"
"net"
"net/http"
"net/rpc"
)

type Chat string

func (t *Chat) Msg(msg string, bytes *int) error {
    *bytes = len(msg)
    return nil
}

func main() {

    server := flag.String("server", "", "Server and port")
    client := flag.Bool("c", false, "Make me a client")
    flag.Parse()

    log.Println("Server: ", *server)

    if !(*client) {

        chat := new(Chat)
        rpc.Register(chat)
        l, e := net.Listen("tcp", *server)
        if e != nil {
            log.Fatal("listen error:", e)
        }
        log.Println(l.Addr().String())
        go rpc.Accept(l)
        http.Serve(l, nil)

    } else {

        log.Println("Client connecting to", *server)
        // !! The error occurs here
        client, err := rpc.DialHTTP("tcp", *server)
        if err != nil {
            log.Fatal("dialing: ", err)
        }

        var reply int
        err = client.Call("Chat.Msg", "Make it so!", &reply)
        if err != nil {
            log.Fatal("chat error:", err)
        }
        log.Println("Msg: returned", reply)
}
}

【问题讨论】:

标签: go rpc


【解决方案1】:

我认为您在 rpc.Register(chat) 之后缺少 rpc.HandleHTTP()。尝试将您的代码更改为

...
rpc.Register(chat)
rpc.HandleHTTP()
...

这样对我有用,我得到了

2014/03/20 18:31:21 Server:  localhost:55209
2014/03/20 18:31:21 Client connecting to localhost:55209
2014/03/20 18:31:21 Msg: returned 11

而且你不需要go rpc.Accept(l)。至少对我来说,没有这条线它可以工作。

【讨论】:

  • 谢谢,这正是缺少的。确认,Accept 不是必需的,我认为它是尝试解决问题时遗留下来的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
  • 2022-01-22
  • 2017-08-04
  • 1970-01-01
  • 2020-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多