我的服务器:func (t *Arith) Multiply(args *Args, reply *int) error { *reply = args.A * args.B return nil}func main() { arith := new(Arith) rpc.Register(arith) rpc.HandleHTTP() l, e := net.Listen("tcp", ":1234") if e != nil { log.Fatal("listen error:", e) } go http.Serve(l, nil)}客户:client.Call("Arith.Multiply", args, &reply)我想然后Multiply在另一个 goroutine 中运行?在client.Call()实际调用go server.SomeFun()?
1 回答
森林海
TA贡献2011条经验 获得超2个赞
每个 http 请求都有自己的 goroutine,这是其自身的一个属性http.Server
,并net/rpc
建立在它之上。
从以下文档http.Serve
:
Serve 在侦听器 l 上接受传入的 HTTP 连接,为每个.服务 goroutine 读取请求,然后调用处理程序来回复它们。 Handler 通常为 nil,在这种情况下使用 DefaultServeMux。
HandleHTTP 在 DefaultRPCPath 上为 DefaultServer 注册一个用于 RPC 消息的 HTTP 处理程序,并在 DefaultDebugPath 上注册一个调试处理程序。仍然需要调用 http.Serve(),通常在 go 语句中。
- 1 回答
- 0 关注
- 148 浏览
添加回答
举报
0/150
提交
取消