如何确保出站邮件的顺序

时间:2013-08-07 16:57:36

标签: javascript

我正在寻找建议,以解决我通过套接字发送消息时遇到的问题的最佳方法。我需要确保保留消息发送的顺序,即先进先出,即使我无法保证套接字始终打开。

我的程序中有一个网络管理器,有一个发送方法。此send方法接受一个消息对象,然后尝试通过套接字将其推出。

但是,由于网络连接丢失,有时套接字将被关闭,我需要在等待套接字重新打开时停止发送消息并排队任何新消息。当套接字重新打开时,应按顺序发送排队的消息。

我正在使用Javascript和Websockets。我现在有类似的东西,但似乎有缺陷:

function send(msg) {
    if (msg) {
        outbox.push(msg);
    }

    if (!readyState) {
        return setTimeout(send, 100);
    }

    while (outbox.length) {
        socket.send(outbox.shift());
    }
}

有没有人曾经解决过这样的问题?我正在寻找构建程序的一般方法,或者可能使用的算法。

2 个答案:

答案 0 :(得分:2)

亚当。这是一个稍微完整的答案。如果我是你,我会把它包装在一个连接对象中。

function send(msg) {

   if (msg) {
      if (socket.readyState === socket.OPEN) {
         socket.send(msg);
      } else  {
         outbox.push(msg);
      }
   }
}


socket.onopen = function() {
   while(outbox.length) {
      socket.send(outbox.shift());
   }
}

答案 1 :(得分:0)

就结构而言,你只是在问一般吗?

你有没有想过用push()pop()shift()和unshift()来使用逻辑?

基本上在某种类型的套接字错误回调中,将消息推送到堆栈中。当可以打开套接字或者您想尝试再次按下消息时,可以将()正确的对象移出。您可以使用它们的任何组合来获得正确的消息排序。