【问题标题】:Send ack to server from client after receiving socket.io payload收到 socket.io 有效负载后,从客户端向服务器发送 ack
【发布时间】:2023-03-23 03:10:02
【问题描述】:

我正在与之通信的服务器在提供第一个响应后需要确认才能继续提供响应。我想弄清楚如何从我的客户那里发送一个确认。根据文档:

服务器每100毫秒推送一次数据,但数据 只会发送给客户端,如果客户端确认 以前的数据。换句话说,要继续接收数据, 客户必须发送确认。确认码为1 (整数)。 var CLIENT_ACKNOWLEDGEMENT = 1;

我的代码如下所示:

@objc func attemptSubsciption() { 
   if manager.status == .connected {
      socket.emit("sub", ["state": true]) //This functions correctly
   } else {
      print(manager.status, "... will attempt subscription in 1 second")
      self.perform(#selector(attemptSubsciption), with: nil, afterDelay: 1)
   }
}


func addSocketHandlers() {
   socket.on("data", callback: { data, ack in
      //Do required work. This functions correctly, but there's only one response                
      print(ack.expected) //This logs true
      //What to do here? How do I tell the server I've got the packet? I've tried something like ack.with([1]) or ack.with(["CLIENT_ACKNOWLEDGEMENT" : 1])
   })
}

我在网上阅读的大部分内容似乎都建议在我的 emit 调用中添加一个回调函数,但这无法编译,因为 emit 函数不接受第三个参数。我觉得我可能遗漏了一些非常明显的东西。

【问题讨论】:

    标签: ios swift socket.io


    【解决方案1】:

    您可以尝试直接在ack 中传递确认码,这样做:

    func addSocketHandlers() {
        socket.on("data", callback: { data, ack in
           ack.with(1)
        }
    }
    

    【讨论】:

    • 天哪,这真的很明显!谢谢@Andrea!
    • 工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 2020-12-25
    • 2013-09-09
    • 2019-04-23
    • 1970-01-01
    相关资源
    最近更新 更多