- 追加された行はこの色です。
- 削除された行はこの色です。
#contents
** 概要 [#kc0016ed]
- サーバーサイドJavaScript
- 用途:大量のリクエストを高速にさばくメッセージングやAPIなど
- 公式サイト:https://nodejs.org/
-- APIドキュメント:https://nodejs.org/api/
-- Stability:APIの安定/不安定の指標
** 前提知識 [#ha139716]
- HTML/JavaScript
- MongoDB
- Unixコマンド
** 環境 [#d6526524]
- OS X 10.11 El Capitan
- Vagrant 1.8.1
- VirtualBox 5.0.20
- CentOS 7.2.1511
- Node.js 0.10.24
- MongoDB 3.2.6
** Node.jsのインストール(yum) [#h5bab21d]
$ sudo yum install nodejs
$ node -v
v0.10.42
** MongoDBのインストール(yum) [#o0db4fac]
- /etc/yum.repos.d/配下にMongoDBリポジトリファイルを作成
# vi mongodb-org-3.2.repo
[mongodb-org-2.6]
name=MongoDB 2.6 Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
$ sudo yum install -y mongodb-org
$ mongo --version
MongoDB shell version: 3.2.6
** スレッドモデルとイベントループ [#uc6e1ba2]
- スレッドモデル:Apacheなど
-- 1つのリクエストに対して1つのスレッド
-- 大量のリクエストが来るとメモリが枯渇してスレッドが作成できないためリクエストの待ち状態が発生
- イベントループモデル:Node.js
-- 全てのリクエストは一度キューに溜まり随時バックエンドで処理。
-- 処理の順番は保証しない。
-- ノンブロッキングなコードの記述をする必要あり。
-- setTimeout等のタイマー処理を含む処理は次の処理をブロックしないようにコールバック関数として実装する。
-- 全てのリクエストは一度キューに溜まり随時バックエンドで処理
-- 処理の順番は保証しない
-- ノンブロッキングなコードの記述をする必要あり
-- setTimeout等のタイマー処理を含む処理は次の処理をブロックしないようにコールバック関数として実装
** Hello World [#m6096a7a]
- 対話モード
$ node
> console.log("hello world");
hello world
undefined
-- コマンド一覧表示
$ .help
- hello.js作成
console.log("hello world");
- 実行
$ node hello.js
hello world
** ノンブロッキング処理とブロッキング処理 [#q1138ffd]
// non blocking
setTimeout (function () {
console.log("hello");
}, 1000);
console.log("world");
$ node hello.js
world
hello
// blocking
var start = new Date().getTime();
console.log("hello");
while (new Date().getTime() < start + 1000);
console.log("world");
$ node hello.js
hello
world
** Webサーバーを作成 [#a0ea7aae]
- server.js作成
var http = require('http');
var server = http.createServer();
server.on('request', function(req, res) {
res.writeHead(200, {'Content-TYpe': 'text/plain'});
res.write('hello world');
res.end();
});
server.listen(1337, '192.168.33.10');
console.log('server listening ...');
$ node server.js
server listening ...
- ブラウザで http://192.168.33.10:1337/ へアクセスし"hello world"が表示されることを確認