Skip to content

Instantly share code, notes, and snippets.

@gr33ngr33n
Forked from montanaflynn/CONCURRENCY.md
Created January 17, 2021 08:08
Show Gist options
  • Select an option

  • Save gr33ngr33n/50a2fa627926fa6b84778fb7df36beb2 to your computer and use it in GitHub Desktop.

Select an option

Save gr33ngr33n/50a2fa627926fa6b84778fb7df36beb2 to your computer and use it in GitHub Desktop.
Examples of sequential, concurrent and parallel requests in node.js
// CONCURRENT REQUESTS
var http = require('http')
function concurrentRequests(){
for (var i = 0; i < 5; i++) {
var request = {
hostname: 'httpbin.org',
headers: {'request-id': i},
path: '/delay/.'+ Math.floor(Math.random() * (5 - 1 + 1)) + 1
}
http.get(request, (res) => {
var body = ''
res.on('data', function (chunk) {
body += chunk
})
res.on('end', function () {
console.log(JSON.parse(body).headers['Request-Id'])
})
}).end()
}
}
console.log("Running concurrent requests!")
concurrentRequests()
// PARALLEL REQUESTS
var http = require('http')
var cluster = require('cluster')
function getResponse(i, cb){
var request = {
hostname: 'httpbin.org',
headers: {'request-id': i},
path: '/delay/.'+ Math.floor(Math.random() * (5 - 1 + 1)) + 1
}
http.get(request, (res) => {
var body = ''
res.on('data', function (chunk) {
body += chunk
})
res.on('end', function () {
cb(JSON.parse(body).headers['Request-Id'])
})
}).end()
}
if(cluster.isMaster) {
var numWorkers = require('os').cpus().length;
for(var i = 0; i < 5; i++) {
var worker = cluster.fork()
worker.on('message', function(message) {
console.log(message.data.result)
})
}
var count = 0
for(var wid in cluster.workers) {
count++
if (count > 5) {return}
cluster.workers[wid].send({
type: 'request',
data: {
number: count
}
})
}
} else {
process.on('message', function(message) {
if(message.type === 'request') {
getResponse(message.data.number, function(res){
process.send({
data: {
result: res
}
})
process.exit(0)
})
}
})
}
// SEQUENTIAL REQUESTS
var http = require('http')
function sequentialRequest(count){
if (count == undefined) {count = 0}
count++
if (count > 5) {return}
var request = {
hostname: 'httpbin.org',
headers: {'request-id': count},
path: '/delay/.'+ Math.floor(Math.random() * (5 - 1 + 1)) + 1
}
http.get(request, (res) => {
var body = ''
res.on('data', function (chunk) {
body += chunk
})
res.on('end', function () {
console.log(JSON.parse(body).headers['Request-Id'])
sequentialRequest(count)
})
}).end()
}
console.log("Running sequential requests!")
sequentialRequest()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment