feat: server-side ACK flow control (chunk→ack→next), bump 1.0.17
Deploy loadtest / validate (push) Waiting to run

This commit is contained in:
2026-07-11 06:44:23 +04:00
parent b509491c60
commit 2ccef934b4
2 changed files with 26 additions and 28 deletions
+23 -26
View File
@@ -211,28 +211,8 @@ function uploadFileWS(url, f, idx) {
ws.onopen = function () {
var reader = new FileReader();
function sendOrWait(data) {
if (ws.bufferedAmount > 256 * 1024) {
setTimeout(function () { sendOrWait(data); }, 10);
return;
}
ws.send(data);
offset += CHUNK;
if (offset < f.size) {
var pct = Math.round(offset / f.size * 100);
if (pct - lastProgress >= 10) {
lastProgress = pct;
f.progress = pct;
renderTable();
}
readNext();
} else {
ws.send('DONE');
}
}
reader.onload = function (e) {
sendOrWait(e.target.result);
ws.send(e.target.result);
};
function readNext() {
var end = Math.min(offset + CHUNK, f.size);
@@ -244,11 +224,28 @@ function uploadFileWS(url, f, idx) {
ws.onmessage = function (e) {
try {
var r = JSON.parse(e.data);
clearTimeout(timer);
f.progress = 100;
renderTable();
ws.close();
resolve({ bytes: r.bytes, elapsed_ms: Date.now() - startTime });
if (r.ack) {
// Сервер подтвердил получение N байт
offset = r.ack;
var pct = Math.round(offset / f.size * 100);
if (pct - lastProgress >= 10) {
lastProgress = pct;
f.progress = pct;
renderTable();
}
if (offset < f.size) {
readNext();
} else {
ws.send('DONE');
}
} else if (r.ok) {
// Финальный ответ
clearTimeout(timer);
f.progress = 100;
renderTable();
ws.close();
resolve({ bytes: r.bytes, elapsed_ms: Date.now() - startTime });
}
} catch (err) {
reject(new Error('Bad response'));
}