1'use strict'; 2// Flags: --expose-gc 3// just a simple http server and client. 4 5const common = require('../common'); 6const onGC = require('../common/ongc'); 7 8const cpus = require('os').availableParallelism(); 9 10function serverHandler(req, res) { 11 res.writeHead(200, { 'Content-Type': 'text/plain' }); 12 res.end('Hello World\n'); 13} 14 15const http = require('http'); 16const numRequests = 36; 17let createClients = true; 18let done = 0; 19let count = 0; 20let countGC = 0; 21 22const server = http.createServer(serverHandler); 23server.listen(0, common.mustCall(() => { 24 for (let i = 0; i < cpus; i++) 25 getAll(numRequests); 26})); 27 28function getAll(requestsRemaining) { 29 if (!createClients) 30 return; 31 32 if (requestsRemaining <= 0) 33 return; 34 35 const req = http.get({ 36 hostname: 'localhost', 37 pathname: '/', 38 port: server.address().port 39 }, cb); 40 41 count++; 42 onGC(req, { ongc }); 43 44 setImmediate(getAll, requestsRemaining - 1); 45} 46 47function cb(res) { 48 res.resume(); 49 done += 1; 50} 51 52function ongc() { 53 countGC++; 54} 55 56setImmediate(status); 57 58function status() { 59 if (done > 0) { 60 createClients = false; 61 global.gc(); 62 console.log(`done/collected/total: ${done}/${countGC}/${count}`); 63 if (countGC === count) { 64 server.close(); 65 } else { 66 setImmediate(status); 67 } 68 } else { 69 setImmediate(status); 70 } 71} 72