我正在尝试使用 Go 中的 RPC 调用来获得最小的应用程序。我大量借鉴了在线示例,正如您从我的代码中看到的:
server.go:
package main
import (
[...]
)
type InfoDumper int
func (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 的初步步骤;所有其他学生都设法使这一步工作,看着这段代码,看不出与他们的区别。
有没有人看到这段代码有什么问题?
喵喵时光机
相关分类