为了账号安全,请及时绑定邮箱和手机立即绑定

在 GO 中使用 UDP 的 RPC

在 GO 中使用 UDP 的 RPC

Go
慕的地6264312 2021-08-30 15:15:18
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)}当我运行这些时,它们都挂了,什么也没发生。我究竟做错了什么?
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

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

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

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

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

我不知道有任何实现无连接 RPC for go 的包,因此您可能必须在这里推出自己的包。


查看完整回答
反对 回复 2021-08-30
  • 1 回答
  • 0 关注
  • 369 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信