我正在iOS上使用NWConnection通过路由器通过udp与本地设备进行时间同步。
需要低于ms的分辨率。平均延迟为1〜8毫秒,sub-ms 通过反复测量时间并使用统计数据进行估算,可以实现分辨率。
但是我很难确定客户端代码。
当前,伪代码如下:
while(errorMs>0.5){
connection.send(...) // query the time
connection.receiveMessage(...) // reply handler
delayMs(1000)
//some custom timeout handling code
}
它可以正常工作,直到出现丢包/延迟,发送和接收对将开始未对齐。
在iOS上,除了关闭整个连接之外,我看不到任何方法来在连接上定义“全局” onreceive
处理程序,也看不到取消receiveMessage
的方法。即使可以取消接收,也有可能在后一个处理程序中接收到延迟的数据包,从而造成麻烦。
我认为我可以通过重新打开连接并在检测到延迟的数据包时更改本地端口来解决此问题。
但是我想知道是否有任何标准模式可以做到这一点。
NWConnection的doc: https://developer.apple.com/documentation/network/nwconnection