【ドットインストール】node.jsを学ぶ1

最近ドットインストールやってます。

無料の講座でも十分遊べるので気に入ってます。

今日の講座はこちら。

dotinstall.com

以下、講座のメモ。

の前に、環境構築

CentOS7で構築しようとしたら盛大にコケたので書いておく。

以下、CentOS6(64bit)にて構築

node.js + npm

$sudo yum install -y epel-release
$yum install -y nodejs npm --enablerepo=epel
$node -v
v0.10.36
$npm -v
1.3.6

mongodb

以下のファイルを作成して記述
/etc/yum.repos.d/mongodb.repo

[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
$sudo yum install -y mongodb-org
$sudo service mongod start
Starting mongod:

Centos7だとこうかな?(確認してないけど)

$sudo systemctl start mongod
Starting mongod:

node.jsは何が良いの?

リクエストの処理の仕方が違う。

  • スレッドモデル(Apache)
    大量のリクエストが飛んで来るとメモリが不足する

  • イベントループ(node.js)
    メインのスレッドが1つ(シングルスレッド)、キューでリクエストを受け付けて1個ずつ処理していく
    大量のリクエストが来てもダウンしにくい

  • Javascriptでサーバサイドを記述できる(これは人による)

ノンブロッキング

javascriptが採用されている理由はこれ。
ちなみに見た目とかDOMに関する機能は使えない(当然っちゃ当然)

簡単な使い方

$node
>console.log("Hello");
Hello
undefined
>.exit

ファイルの場合は引数にファイル名を当てるだけ

$node hello.js
Hello

ノンブロッキングって何

  1 //non-blocking
  2 setTimeout(function(){
  3   console.log("hello");
  4   },1000);
  5 console.log("wolrd");

次の処理を邪魔しないようにコールバック関数を使って書くことを指す。

結果は以下のとおり。

$node hello.js
wolrd
hello

先にworldと出て、helloがあとから出る。

ちなみに次のように書くとブロッキングな書き方。

  1 //blocking
  2
  3 var start = new Date().getTime();
  4 while(new Date().getTime() < start+1000);//現在時刻から1秒後までループ
  5 console.log("world");

実行するとわかるが、一秒立たないとworldが表示されない。