BREAKING CHANGE(serviceworker): Move serviceworker speedtest to time-based chunked transfers and update dashboard/server contract

This commit is contained in:
2025-12-04 13:42:19 +00:00
parent 5f015380be
commit 43a335ab3a
6 changed files with 83 additions and 53 deletions

View File

@@ -308,31 +308,31 @@ export class TypedServer {
);
// Speedtest handler for service worker dashboard
// Client calls this in a loop for the test duration to get accurate time-based measurements
this.typedrouter.addTypedHandler<interfaces.serviceworker.IRequest_Serviceworker_Speedtest>(
new plugins.typedrequest.TypedHandler('serviceworker_speedtest', async (reqArg) => {
const startTime = Date.now();
const payloadSizeKB = reqArg.payloadSizeKB || 100;
const sizeBytes = payloadSizeKB * 1024;
const chunkSizeKB = reqArg.chunkSizeKB || 64;
const sizeBytes = chunkSizeKB * 1024;
let payload: string | undefined;
let bytesTransferred = 0;
switch (reqArg.type) {
case 'download':
case 'download_chunk':
// Generate chunk data for download test
payload = 'x'.repeat(sizeBytes);
bytesTransferred = sizeBytes;
break;
case 'upload':
case 'upload_chunk':
// Acknowledge received upload data
bytesTransferred = reqArg.payload?.length || 0;
break;
case 'latency':
bytesTransferred = 1;
// Simple ping - minimal data
bytesTransferred = 0;
break;
}
const durationMs = Date.now() - startTime;
const speedMbps = durationMs > 0 ? (bytesTransferred * 8) / (durationMs * 1000) : 0;
return { durationMs, bytesTransferred, speedMbps, timestamp: Date.now(), payload };
return { bytesTransferred, timestamp: Date.now(), payload };
})
);
} catch (error) {