为了账号安全,请及时绑定邮箱和手机立即绑定

Go 中的简单 RPC 调用

Go 中的简单 RPC 调用

Go
慕斯709654 2021-07-02 15:00:09
我正在尝试使用 Go 中的 RPC 调用来获得最小的应用程序。我大量借鉴了在线示例,正如您从我的代码中看到的:server.go:package mainimport (    [...])type InfoDumper intfunc (s *InfoDumper) Dump(request string, reply *string) error {    fmt.Println("Woooh imma deliverin stuff\n")    current_time := time.Now()    h:= sha1.New()    var barray []byte    copy(barray, request)    hash_rq := h.Sum(barray)    *reply = request + "\n" + current_time.Format(time.ANSIC) + "\n"  + string(hash_rq) + "\n"    return nil}func main() {    server := new(InfoDumper)    rpc.Register(server)    rpc.HandleHTTP()    l, e := net.Listen("tcp", "127.0.0.1:40000")    if e != nil {        fmt.Println(e)    }    http.Serve(l, nil)}我能看到的唯一区别是我写的http.Serve(l, nil)不是go http.Serve(l, nil); 这是因为写入go使我的服务器立即终止。InfoDump 应该回复发送的任何内容的副本,请求的时间和哈希值。这就是现在正在发生的事情:我在终端中运行 server.go我在另一个终端中运行 client.go,大约一秒钟后打印“wooh server is ok”我输入一些东西并在客户端按 Enter要么什么也没发生,要么在客户端打印“rpc:客户端协议错误:意外的 EOF”如果什么也没发生,终止服务器(即点击 Control-C)使客户端打印上面的错误在任何一种情况下,“Woooh imma Deliverin stuff”都不会显示在服务器端......这是在课堂上完成的,作为在进行更严肃的练习之前熟悉 Go 中的 RPC 的初步步骤;所有其他学生都设法使这一步工作,看着这段代码,看不出与他们的区别。有没有人看到这段代码有什么问题?
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

正如我在注意到邮件列表响应,则需要使用DialHTTP如果你想连接到RPC服务器,您已经使用服务HandleHTTP

我在邮件列表上做了一些关于你的代码的其他注释(包括样式:使用 gofmt 和 MixedCaps,每个Effective Go,并确保避免错误)。



查看完整回答
反对 回复 2021-07-12
  • 1 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信