rpc Call 方法是否与服务器在同一个 go 例程中运行?

我的服务器:


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()?


BIG阳
浏览 149回答 1
1回答

森林海

每个 http 请求都有自己的 goroutine,这是其自身的一个属性http.Server,并net/rpc建立在它之上。从以下文档http.Serve:Serve 在侦听器 l 上接受传入的 HTTP 连接,为每个.服务 goroutine 读取请求,然后调用处理程序来回复它们。 Handler 通常为 nil,在这种情况下使用 DefaultServeMux。从rpc.HandleHTTP:HandleHTTP 在 DefaultRPCPath 上为 DefaultServer 注册一个用于 RPC 消息的 HTTP 处理程序,并在 DefaultDebugPath 上注册一个调试处理程序。仍然需要调用 http.Serve(),通常在 go 语句中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go