Last active
March 8, 2023 09:22
-
-
Save mike-at-redspace/2402fca4f5623459b2becceb936381ff to your computer and use it in GitHub Desktop.
Worker Threads in Node.js 18
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const http = require('http'); | |
const { Worker } = require('worker_threads'); | |
const slowApiEndpoint = 'https://api.example.com/slow-endpoint'; | |
http.createServer((req, res) => { | |
if (req.url === '/api-data') { | |
const worker = new Worker('./slow-api-worker.js'); | |
worker.on('message', (data) => { | |
res.writeHead(200, { 'Content-Type': 'application/json' }); | |
res.write(data); | |
res.end(); | |
}); | |
worker.on('error', (err) => { | |
console.error(`Worker error: ${err}`); | |
res.writeHead(500, { 'Content-Type': 'text/plain' }); | |
res.write('500 Internal Server Error'); | |
res.end(); | |
}); | |
worker.on('exit', (code) => { | |
console.log(`Worker exited with code ${code}`); | |
}); | |
} else { | |
res.writeHead(404, { 'Content-Type': 'text/plain' }); | |
res.write('404 Not Found'); | |
res.end(); | |
} | |
}).listen(8080, () => { | |
console.log('Server listening on port 8080'); | |
}); | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const { Worker } = require('worker_threads'); | |
const https = require('https'); | |
const slowApiEndpoint = 'https://api.example.com/slow-endpoint'; | |
function makeSlowApiCall() { | |
return new Promise((resolve, reject) => { | |
https.get(slowApiEndpoint, (res) => { | |
let data = ''; | |
res.on('data', (chunk) => { | |
data += chunk; | |
}); | |
res.on('end', () => { | |
resolve(data); | |
}); | |
}).on('error', (err) => { | |
reject(err); | |
}); | |
}); | |
} | |
function makeApiCallAndSendResponse() { | |
makeSlowApiCall().then((data) => { | |
worker.postMessage(data); | |
}).catch((err) => { | |
console.error(`API call error: ${err}`); | |
worker.postMessage('500 Internal Server Error'); | |
}); | |
} | |
const worker = new Worker(() => { | |
makeApiCallAndSendResponse(); | |
}); | |
worker.on('error', (err) => { | |
console.error(`Worker error: ${err}`); | |
}); | |
worker.on('exit', (code) => { | |
console.log(`Worker exited with code ${code}`); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment