使用setImmediate()作为排队机制是一个坏主意吗?

时间:2016-12-09 12:21:10

标签: javascript node.js websocket queue

仅针对上下文,我所拥有的是相对高吞吐量的websocket实现。消息通过打开的websocket从服务器发送到服务器。但是,当连接丢失时,我们需要对消息进行排队,直到重新获得连接。在这一点上,我们并不关心持久性,因为如果服务器崩溃,我们不需要备份消息。我们也不太关心消息的顺序。

所以到目前为止我的内容类似于以下内容:

function sendPayload( payload ) {
  var self = this;
  if ( self._state !== states.connected ) {
    // Queue until connected
    setImmediate( sendPayload.bind( self, payload ) );
  }
  else {
    self._wsClient.send( payload );
  }
}

上面已经引起了同行的一些奇怪的表情,所以我想让你们所有人都去做。我希望避免管理一个实际的队列(填充数组等),并认为这是一种快速简便的方法,可以在建立连接之前保持消息保持不变,并且一旦发生连接就快速发送它们。

有人建议使用setTimeout(fn,0)可能会更好,但实际上没有提供太多详细信息。从这个意义上讲,根据我的要求,我不认为它们之间会有太大的相关差异。

以上哪种方法比另一方更好,或者我应该完全不同地做这件事?

0 个答案:

没有答案