gpt4 book ai didi

go - 在 GO 中使用 UDP 的 RPC

转载 作者:IT王子 更新时间:2023-10-29 02:24:14 25 4
gpt4 key购买 nike

Unity3D 网络库使用 UDP 并具有用于 RPC 调用的方法。我试图让我的服务器通过 UDP 使用 RPC,但我遇到了一些麻烦。这是我现在得到的基本服务器代码:

type Args struct {
X, Y int
}

type RequestHandler struct{}

func (self *RequestHandler) Add(args *Args, reply *int) error {
*reply = args.X + args.Y
return nil
}

func main() {
addr := net.UDPAddr{ Port: 5127, IP: net.ParseIP("127.0.0.1") }
handler := new(RequestHandler)

rpc.Register(handler)
conn, err := net.ListenUDP("udp", &addr)
defer conn.Close()

if err != nil {
panic(err)
}

for {
go rpc.ServeConn(conn)
}
}

这是客户端代码:

type Args struct {
X, Y int
}

func main() {
client, err := rpc.Dial("udp", "127.0.0.1:5127")
if err != nil { log.Fatal("dialing:", err) }

// Synchronous call
args := &Args{7,8}
var reply int
err = client.Call("RequestHandler.Add", args, &reply)
if err != nil {
log.Fatal("arith error:", err)
}

fmt.Printf("Result: %d + %d = %d", args.X, args.Y, reply)
}

当我运行它们时,它们都挂起,没有任何反应。我做错了什么?

最佳答案

由于 UDP 套接字的性质,UDP 上的 RPC 需要特殊的 UDP 感知处理。

没有连接,只有发送到地址的数据报。

为了让客户端得到回复,它必须设置一个监听套接字,然后将其与请求一起发送到服务器。服务器将回复客户端地址。

net/rpc 对非连接导向的传输没有任何特殊情况处理(即:UDP)

我不知道有任何包实现无连接 RPC for go,所以你可能需要自己动手。

关于go - 在 GO 中使用 UDP 的 RPC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26940554/

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