■ Node.js
* 大量のリクエストを捌くことができる
公式サイト
https://nodejs.org/en/
動画サイト
分かりやすい
https://dotinstall.com/lessons/basic_nodejs
■ 知識
スレッドモデル / イベントループ
* Node.jsでは、イベントループを採用
スレッドモデル
* Apacheで採用 * 1リクエストに対して、1スレッドで対応 => スレッドをたちあげるごとにメモリ消費されるので、大量リクエストには向かない +--------+ +--------+ | Thread | | Thread | +--------+ +--------+ +--------+ +--------+ | Request| | Request| +--------+ +--------+
イベントループ
* イベントを待機するループを持つ仕組み +----+ | | Event Loop (メインのスレッドは1つ。シングルスレッド) +----------------+ | | Queue |<-+ <= キューにリクエストを貯め受け付ける +----------------+ | I/O | <= 順番にバックグラウンドの処理に渡していく +----------------+
【注意点】
1) 処理が終わる順番が分からない 2) ループをブロックしないようにプログラミングする(ノンブロッキング)
* Node.js では ノンブロッキング な書き方をしていかなくてはならない
// Blocking var start = new Date().getTime(); while (new Date().getTime() < start + 1000); // ★ここでブロッキングしている★ console.log("World");
【出力結果】
(1秒後...) World ノンブロッキング // Non-Blocking setTimeout(function() { console.log("Hello, "); }, 1000); console.log("World");
【出力結果】
World Hello,
関連記事
Node.js ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2021/11/06/000000
Node.js ~ 基本編 / npm ~
https://dk521123.hatenablog.com/entry/2018/06/13/234315
Node.js ~ 基本編 / ファームデータを処理する ~
https://dk521123.hatenablog.com/entry/2018/06/17/093535