Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一个javascript客户端库,用于使用存储支持对ajax请求进行排队_Javascript_Ajax_Websocket_Socket.io - Fatal编程技术网

是否有一个javascript客户端库,用于使用存储支持对ajax请求进行排队

是否有一个javascript客户端库,用于使用存储支持对ajax请求进行排队,javascript,ajax,websocket,socket.io,Javascript,Ajax,Websocket,Socket.io,我正在寻找一个javascript客户端库来处理ajax或websocket请求队列,如下所示: 当用户在线且服务器启动时直接传输请求 当用户脱机或服务器关闭时使用本地存储存储请求 当用户联机且服务器恢复联机时发送存储的请求 理想情况下: 没有jquery 我还需要一个服务器端组件 我找不到像这样的东西。例如,我应该使用localstorage、window.navigator.onLine和socket.io自己构建一个,还是已经有一些用于此目的的lib 谢谢。这个问题可能就要结束了,

我正在寻找一个javascript客户端库来处理ajax或websocket请求队列,如下所示:

  • 当用户在线且服务器启动时直接传输请求
  • 当用户脱机或服务器关闭时使用本地存储存储请求
  • 当用户联机且服务器恢复联机时发送存储的请求
理想情况下:

  • 没有jquery
  • 我还需要一个服务器端组件
我找不到像这样的东西。例如,我应该使用localstorage、window.navigator.onLine和socket.io自己构建一个,还是已经有一些用于此目的的lib


谢谢。

这个问题可能就要结束了,因为在StackOverflow上通常不欢迎询问图书馆。然而,这是一个有趣的小挑战。(我花了大约15分钟才完成。)

这实际上不是一个非常大的任务来处理,只有50行左右。这可能就是为什么你找不到一个小图书馆来做这件事

function Sender() {
    var requests = [],
        state = 0; // 0 = closed, 1 = open
        ws = new WebSocket();

    ws.onopen = function() {
        state = 1;
        if (requests.length) {
            send();
        }
    };

    ws.onerror = function() {
        if (ws.readyState !== 1) { // 1 is "OPEN"
            close();
        }
    };

    // Let's fill in the requests array if necessary
    // IIFE because I don't want to pollute the scope with `req`
    (function() {
        var req = JSON.parse(localStorage.get('queue'));
        if (req.length) {
            requests = requests.concat(req);
        }
    }());

    return {
        send: function(msg) {
            if (state === 0) {
                requests.push(msg);
            }
            else {
                send();
            }
        },
        close: function() {
            state = 0;
            localStorage.set('queue', JSON.stringify(requests));
        }
    };

    function send() {
        var done = false;
        while (!done) {
            if (state === 1) {
                ws.send(requests.pop());
                if (!requests.length) {
                    done = true;
                }
            }
            else {
                done = true;
            }
        }
    }
}

// Usage example
var sender = Sender();
sender.send('message');

// let's say your "disconnect" button is in a variable
disconnect.addEventListener('click', function() {
    sender.close();
}, false);

服务器不必处理除正常请求以外的任何事情。如果您愿意,您可以在发送的邮件中添加时间戳,这样就很容易(2行左右)记录时间。

@如果我可以避免的话,那就奇怪了