gpt4 book ai didi

go - 向一组主机发送带有确认的消息

转载 作者:IT王子 更新时间:2023-10-29 01:40:17 25 4
gpt4 key购买 nike

函数如下:

func Message(worker_ID int, message string, args *Args , reply *int) chan bool {
}

这个函数驻留在主机上,当客户端要向主机发送消息时调用它,主机位于不同的地方,所以发送消息需要 IP 和端口,对吗? net.dial()gobrpc 哪种机制有用?

最佳答案

如果您想要简单的东西,请查看 net/rpc它将 gob 和网络包装到一个远程过程调用框架中,它应该做你想做的事。

服务器

来自文档的服务器运行在 HTTP 上

type Args struct {
A, B int
}

type Arith int

func (t *Arith) Multiply(args *Args, reply *int) error {
*reply = args.A * args.B
return nil
}

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)

客户端

此时,客户端可以看到一个服务“Arith”和方法“Arith.Multiply”。要调用一个,调用服务器然后调用电话。您还可以进行异步调用,结果在 channel 中返回。

client, err := rpc.DialHTTP("tcp", serverAddress + ":1234")
if err != nil {
log.Fatal("dialing:", err)
}

args := &server.Args{7,8}
var reply int
err = client.Call("Arith.Multiply", args, &reply)
if err != nil {
log.Fatal("arith error:", err)
}
fmt.Printf("Arith: %d*%d=%d", args.A, args.B, reply)

框架的一个小奇怪之处在于每个远程调用只能有一个输入参数和一个输出参数,这意味着您需要将所有参数包装在一个结构中。

关于go - 向一组主机发送带有确认的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14180097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com