【发布时间】:2017-11-18 00:47:55
【问题描述】:
我编辑了一个库 (ddp-client) 以使用心跳计时器,它每 X 秒发送一次 ping。但是,我也在使用蓝牙硬件做一些工作,我认为这会导致 ping 有时无法及时返回(因为蓝牙似乎暂时阻止了事件循环)。有没有办法在事件循环中优先考虑某个函数,所以它总是在其他函数之前执行?我不认为setImmediate 适合这里,因为我不知道服务器的响应消息何时到达。
定时器的实现大致如下:
every X seconds
if(ping outstanding) {
//Did not resolve in time
closeConnection()
} else {
ping outstanding = true
sendPing()
}
如果我在没有蓝牙模块的情况下运行它,它会非常好用。当我启用蓝牙模块时,有时无法解析 ping,因为扫描蓝牙所花费的时间有时比计时器的间隔长,导致断开连接,而实际上它仍然处于连接状态。
【问题讨论】:
标签: node.js bluetooth priority-queue event-loop ddp