收到socket.io有效负载后,从客户端向服务器发送ack

时间:2018-02-01 21:57:23

标签: ios swift socket.io

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

  

服务器每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函数不接受第三个参数。我觉得我可能错过了一些非常明显的东西。

1 个答案:

答案 0 :(得分:4)

您可能会尝试直接在ack内传递确认码,这样做:

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