Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.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中定义最大连接数_Javascript_Forms_Connection_Max_Send - Fatal编程技术网

如何在javascript中定义最大连接数

如何在javascript中定义最大连接数,javascript,forms,connection,max,send,Javascript,Forms,Connection,Max,Send,我有一个发送AJAX请求的循环,它可以很好地处理5个左右的文件,但是当我尝试上传5个以上的文件时。浏览器停止 有没有办法创建或定义最大数量的同时连接,并在连接完成后启动另一个连接 for (i=0;i<=files.length;i++) { var http = new XMLHttpRequest(); var data = "type=ZIP&file=" + base_64_encode(files[i]); http.open("POST", "update.php"

我有一个发送AJAX请求的循环,它可以很好地处理5个左右的文件,但是当我尝试上传5个以上的文件时。浏览器停止

有没有办法创建或定义最大数量的同时连接,并在连接完成后启动另一个连接

for (i=0;i<=files.length;i++) {

var http = new XMLHttpRequest();
var data = "type=ZIP&file=" + base_64_encode(files[i]);

http.open("POST", "update.php");
http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
http.send(data);

}

如果我理解正确的话,你只是想扼杀他们?要做到这一点,可以跟踪并发的数量,维护超过最大并发的请求队列,并向请求附加一个回调,更新当前并发值并触发下一个排队函数(如果适用):

function throttleFileUploads(files, maxConcurrent) {
  var queue = [];
  var currentlyActive = 0;

  function moreAllowed() { return (currentlyActive < maxConcurrent); }

  function uploadFile(file, callback) {
    currentlyActive += 1;
    var http = new XMLHttpRequest();
    var data = "type=ZIP&file=" + base_64_encode(file);

    http.open("POST", "update.php");
    http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    http.onreadystatechange = function() {
      if (http.readyState == 4) { callback(); }
    };

    http.send(data);
  }

  function finished() {
    currentlyActive -= 1;
    if (moreAllowed() && queue.length) { queue.pop()(); }
  }

  files.forEach(function(file) {
    var action = uploadFile.bind(null, file, finished);
    if (moreAllowed()) {
      action();
    } else {
      queue.push(action);
    }
  });
}

每个浏览器都有一个内部限制,即它将创建多少个并发连接,包括总连接数和分别到每个域的连接数。你不能影响这一点。不是一个简单的方法,不是。但是,有专门的图书馆来处理这些问题,例如,谢谢你的快速回复,但显然它不起作用,当然不是他们的代码。显然,我正在使用的文件是非常重的8MB。对于这个案子我还有其他的想法吗?有什么可以指引我的链接吗?事实上,我开始使用JavaScript,并且非常喜欢它,但这当然还不够。你能提供更多关于发生了什么的细节吗?上面的代码是否因错误而失败,或者它是否“正常工作”,但上传继续以静默方式失败?我认为问题是当我将文件转换为base64时。我想我需要创建一个在base64中转换的文件列表,以便在发送后在列表中保存名称、大小和类型。然后,从该列表中,我必须将它们转换为base64,并一次发送一个,以避免浏览器饱和,并在发送后将它们从该列表中删除,以便为下一个文件腾出空间。我试图实现您的代码,但在转换为base64并发送时,总是先加载Mb较少的文件,然后再加载较重的文件,而不是按到达顺序加载。在通过通常的测试后,浏览器停止了。你知道怎么做吗?我读了一些关于用setInterval和clearInterval在JavaScript中模拟线程的文章,但我找不到解决方案。有些东西告诉我我就要开始了,但我不知道。
throttleFileUploads(files, 5);