キャパシティプランニングの観点からソケットに最大値を設定したい場合がある
その場合以下のようなヘルパクラスを作成して管理する
const http = require('http')
const https = require('https')
class MyAgent {
constructor(max) {
this.http = new http.Agent(),
this.https = new https.Agent(),
this.http.maxSockets = max
this.https.maxSockets = max
}
get(uri) {
if(uri.match("https://")){
return this.https
}else if(uri.match("http://")){
return this.http
}
}
}
上記で作ったヘルパクラスを以下のようにrequest-promiseのオプションパラメータであるpoolにいれると最大ソケット数を制限できる
下記のサンプルでは五つ同時アクセスをしているがソケット数は1個に制限できている
const rp = require('request-promise')
const myAgent = new MyAgent(1)
const get = async() => {
const uri = "http://example.com"
const opt = {
uri : uri,
method: "GET",
timeout: 10 * 1000,
pool: myAgent.get(uri),
}
const result = { success: null, error: null, time: 0 }
const begintime = process.uptime()
try{
result.success = await rp(opt)
}catch(e){
result.error = e
}
const endtime = process.uptime()
result.time = endtime - begintime
return result
}
get().then(console.log)
get().then(console.log)
get().then(console.log)
get().then(console.log)
get().then(console.log)