我正在嘗試使用 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,并確保避免錯誤)。
- 1 回答
- 0 關注
- 225 瀏覽
添加回答
舉報
0/150
提交
取消