#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等のタイマー処理を含む処理は次の処理をブロックしないようにコールバック関数として実装する。 ** 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"が表示されることを確認