2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

puppeteerを利用したWebページに対する同時アクセス

Posted at

はじめに

puppeteerを利用しパフォーマンステストを実施した際に、Node.jsはシングルスレッドなので同時アクセスを再現するためにマルチスレッド化する必要がありました。
今回は、node.jsのClusterモジュールを利用した同時アクセスの再現方法を記載したいと思います。

前提

  • nodejsおよびpuppeteerはインストール済み

マルチスレッド化

今回は動作確認用のexample.jsをマルチスレッド化してみたいと思います。
マルチスレッド化する前はこんな感じです。

example.js
const puppeteer = require('puppeteer');

(async () => {
   const browser = await puppeteer.launch();
   const page = await browser.newPage();
   await page.goto('https://example.com');
   await page.screenshot({path: 'example.png'});

  await browser.close();
})();

マルチスレッド化したexample.jsはこんな感じになります。

example_multi.js
const cluster = require('cluster');
const puppeteer = require('puppeteer');

//コマンドライン引数で設定されたセッション数を取得
var sessionNum = process.argv[2];

if (cluster.isMaster){
  console.log(`Master ${process.pid} is running`);

  //セッション数に応じてワーカープロセスを起動
  for(let i = 0; i < sessionNum; i++){
    cluster.fork();
  }

  //exitイベントが発生したらワーカープロセスが終了したことを出力
  cluster.on('exit',(worker, code, signal) => {
    console.log(`worker ${worker.process.pid} dead`);
  });

} else {

  (async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://example.com');
    await page.screenshot({path: 'example' + cluster.worker.id.toString() + '.png'});

    await browser.close();
    await process.exit(0);
  })();
}  

確認

画像が5枚、連番で出力されればOK

node example_multi.js 5

処理時間が短いので、数秒しか表示されませんが指定したセッション数分プロセスが立ち上がっているか確認

sudo watch -n5 "ps aux | grep node"
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?