tixture55’s diary

主にプログラミング関係の日記です。

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を実装できる