내 자신의 시험을 썼다. stackoverflow에서 코드를 테스트했으며 chrome / FF가 6을 수행 할 수 있음을 알려줍니다.
var change = 0;
var simultanius = 0;
var que = 20; // number of tests
Array(que).join(0).split(0).forEach(function(a,i){
var xhr = new XMLHttpRequest;
xhr.open("GET", "/?"+i); // cacheBust
xhr.onreadystatechange = function() {
if(xhr.readyState == 2){
change++;
simultanius = Math.max(simultanius, change);
}
if(xhr.readyState == 4){
change--;
que--;
if(!que){
console.log(simultanius);
}
}
};
xhr.send();
});
다른 시간에 readystate 변경 이벤트를 트리거 할 수있는 대부분의 웹 사이트에서 작동합니다. (일명 : 플러싱)
node.js 서버에서 이벤트 / 플러시를 트리거하기 위해 1025 바이트 이상을 출력해야한다는 것을 알았습니다. 그렇지 않으면 이벤트가 요청이 완료되면 한 번에 세 상태를 모두 트리거하므로 여기에 내 백엔드가 있습니다.
var app = require('express')();
app.get("/", function(req,res) {
res.write(Array(1025).join("a"));
setTimeout(function() {
res.end("a");
},500);
});
app.listen(80);
최신 정보
xhr과 fetch api를 동시에 사용하는 경우 최대 2x 요청을 할 수 있습니다.
var change = 0;
var simultanius = 0;
var que = 30; // number of tests
Array(que).join(0).split(0).forEach(function(a,i){
fetch("/?b"+i).then(r => {
change++;
simultanius = Math.max(simultanius, change);
return r.text()
}).then(r => {
change--;
que--;
if(!que){
console.log(simultanius);
}
});
});
Array(que).join(0).split(0).forEach(function(a,i){
var xhr = new XMLHttpRequest;
xhr.open("GET", "/?a"+i); // cacheBust
xhr.onreadystatechange = function() {
if(xhr.readyState == 2){
change++;
simultanius = Math.max(simultanius, change);
}
if(xhr.readyState == 4){
change--;
que--;
if(!que){
document.body.innerHTML = simultanius;
}
}
};
xhr.send();
});