取消对新请求的WebSocket处理

时间:2018-12-27 19:49:44

标签: javascript npm websocket ws

我正在使用npm ws模块(或实际上称为isomorphic-ws的包装器)进行websocket连接。我用它从同一台PC上运行的websocket ++服务器接收一些阵列数据。然后,该数据将被处理并显示为一系列图表。现在的问题是处理本身需要很长时间。我用一条消息来计算16个图表,对于每个图表,我需要计算很多对数和其他慢速运算,以及JS中的所有运算。好吧,整个刷新操作大约需要20秒。现在我可以实际使用它了,但是问题是当我收到一个新请求时,整个消息处理程序完成后就会对其进行处理。如果同时我收到几个请求,则所有请求都将在它们进入时进行处理。因此,请求排在队列中,随着时间的流逝,当前状态越来越过时了……我想拥有一种检测是否有另一条消息等待处理的方法。如果是这种情况,我可以随时停止当前处理程序并重新开始...因此,在使用npm ws时,是否有一种方法可以告诉您还有另一条消息正在等待处理?

谢谢

1 个答案:

答案 0 :(得分:0)

您需要创建某种可取消的job包装器。不看您的代码就很难给出具体建议。但这可能是这样的。

const processArray = array => {
  let canceled = false;

  const promise = new Promise((resolve, reject) => {
    // do something with the array
    for(let i = 0; i < array.length; i++) {
      // check on each iteration if the job has been canceled
      if(canceled) return reject({ reason: 'canceled' });
      doSomething(array[i])
    }
    resolve(result)
  })

  return {
    cancel: () => {
      cancel = true
    },
    promise
  }
}

const job = processArray([1, 2, 3, ...1000000]) // huge array

// handle the success
job.promise.then(result => console.log(result))

// Cancel the job
job.cancel()

我敢肯定有一些库可以满足这个确切的目的。但是我只想举一个基本的例子。