node.jsのポイント・使い道
イベントループの弱点
node.jsは内部的にworkerプロセスを複数もっている。I/O処理はそれらに丸投げする。 ノンブロッキングI/Oが解決するのはI/O処理だけである。 CPUに依存した時間のかかるリクエストはどうしようもない。 イベントループ+ノンブロッキングI/Oの採用によって、大量の接続に耐えることができる。
fs.readFile('file.txt', function (err, data)) {
console.log(data);//ファイルの中身を出力
fs.readFile(data.fileName, function(err, data)) {
console.log(data); //ファイルの中身を出力
//このようにネストがどんどん深くなる
});
});
nodeには同期的なAPIもあるが、I/O処理をブロッキングしてパフォーマンスを下げてしまうので 好ましいとは言えない。コールバックはモジュールを使って解決できる。
●bluebird
●async.js
●Q
●co
pm2・・・ダウンタイムなしでrestartできる。起動オプションをファイル管理できる。 ちょっとしたモニタリング機能もある 別にノードじゃなくても、大量の同時接続数があってもパフォーマンスを落とさずに処理することができる。 例)Scala, golang
node.jsを採用するポイント
●js使いが多い
●I/O処理が大きなボトルネックになるかもしれない
●仕様が複雑じゃない小規模アプリケーション フロントサーバとして利用する ●isomorphic/universalによるコードの共通化
●フロントエンドとサーバのデプロイを分離
●バックエンドのAPIを呼ぶだけのサーバ
●LBではできないコードへの柔軟なAPIコール
●サーバはnodeにjsonを返すだけ
●最初はNodeでバックエンドを実装し、規模が大きくなったら機能追加は別のバックエンドサーバを 実装する。
●nodeはバックエンド&APIサーバとしてふるまう
バックエンドから返されるjsonをnodeで画面用のデータに加工することで、バックエンドはあまり意識せずに ドメインモデルに注力したAPIを実装できる