【Node】Node.js ~ 基礎知識 / 環境構築編 ~

■ 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,

■ 初期設定

Windows
https://nodejs.org/ja/download/current/

で、インストーラ(今回の場合「node-v15.4.0-x64.msi」)をダウンロードして
インストールする。

Linux / CentOS
https://qiita.com/moris/items/4850d4e19392186e34f0

# 公式には配布されていないので、EPELリポジトリからインストール
sudo yum install epel-release
sudo yum install nodejs

# 確認
node -v

■ Node.jsの実行

[1] コマンドラインからの実行(node)(.help :ヘルプ)
[2] 「node 【ファイル名】」(例:node hello.js)

関連記事

Node.js ~ 基本編 / ファームデータを処理する ~
https://dk521123.hatenablog.com/entry/2018/06/17/093535