CentOS で node.js を自動起動する


node.js を自動起動するツールはいくつかあるようです。
今回は forever を使います。

インストール

# npm install forever -g
/usr/local/node-v0.12.2/bin/forever

パスを通す

# ln -s /usr/local/node-v0.12.2/lib/node_modules/forever/bin/forever /usr/local/bin/forever

自動起動
起動スクリプトを書いて、/etc/rc.local に追加する

#!/bin/bash/
/usr/local/bin/node /usr/local/bin/forever start \
  -p /var/run/forever \
  --pidfile /var/run/node-app.pid \
  -l /var/log/node-app.log -a \
  /home/node/app.js

参考
Node.js 自動再起動モジュール
node.js node.jsスクリプトをforeverでデーモン化する


CentOS5 に node.js をインストールする


Node.js はサーバーサイドの JavaScript 環境です。

CentOS5 ではレポジトリが用意されていないので、ソースから入れます。
Node.js のコンパイルには、Python 2.6 以上が必要です。

インストール

# cd /usr/local/src/
# wget http://nodejs.org/dist/v0.12.2/node-v0.12.2.tar.gz
# tar xvzf node-v0.12.2.tar.gz
# cd node-v0.12.2
# ./configure --prefix=/usr/local/node-v0.12.2
# make 
# make install

ディレクトリ構造は、下記のようになります

/usr/local/node-v0.12.2
- bin
-- node
-- npm
- etc
- include
-- node
- lib
-- node_modules
- share
-- man
-- systemtap

バージョンを確認する

# /usr/local/node-v0.12.2/bin/node -v
v0.12.2

リンクを張って、パスを通す

ln -s /usr/local/node-v0.12.2/bin/node /usr/local/bin/node
ln -s /usr/local/node-v0.12.2/bin/npm /usr/local/bin/npm

パスを通ったことを確認する

# node -v
v0.12.2

動作確認
サンプルコードを書く
example.js

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

起動する

$ node example.js
Server running at http://127.0.0.1:1337/

WEBブラウザからアクセスする。
「Hello World」が表示されれば、OK

注意
Node.js のコンパイルには、bz2 が含まれた Python 2.6 以上が必要です。
bz2 がないと、下記のエラーが出て、コンパイルが終了します。
ImportError: No module named bz2


WebSocket – node.js


WebSocket は、コネクションレス型の http プロトコルに代わる、コネクション型の新しいプロトコルです。
node.js には、WebSocket の実装がいくつかあるようです。
今回は ws を使用します。

インストール

npm install ws

コード
サンプルコードを少し修正して、エコーサーバーを作る。

server.js

var WebSocketServer = require('ws').Server
  , wss = new WebSocketServer({port: 8080});
wss.on('connection', function(ws) {
    ws.on('message', function(message) {
        console.log('received: %s', message);
        ws.send(message);
    });
});
console.log('Server running at 8080');

client.js

var WebSocket = require('ws');
var ws = new WebSocket('ws://localhost:8080');
ws.on('open', function open() {
  console.log('connected');
  ws.send(Date.now().toString());
});
ws.on('close', function close() {
  console.log('disconnected');
});
ws.on('message', function message(data) {
  console.log( (Date.now() - parseInt(data)) + 'ms: ' + data);
  setTimeout(function timeout() {
    ws.send(Date.now().toString());
  }, 500);
});
console.log('Client running');

実行例
20150321_ws_server 20150321_ws_client

参考
WebSocket の導入: ウェブにソケットを実装する
The fastest RFC-6455 WebSocket implementation for Node.js
ws – Node.js/JavaScript入門


brew で node をインストールする


Node.js は Unix系で動作するサーバーサイドの JavaScript 環境です。

インストールする

$ brew install node
==> Downloading https://homebrew.bintray.com/bottles/node-0.12.0.mavericks.bottl
Already downloaded: /Library/Caches/Homebrew/node-0.12.0.mavericks.bottle.1.tar.gz
==> Pouring node-0.12.0.mavericks.bottle.1.tar.gz
==> Caveats
If you update npm itself, do NOT use the npm update command.
The upstream-recommended way to update npm is:
  npm install -g npm@latest

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> Summary
 /usr/local/Cellar/node/0.12.0: 2196 files, 25M

npm をアップデートする

$ npm install -g npm@latest
/usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js
npm@2.6.1 /usr/local/lib/node_modules/npm

パスとバージョンを確認する

$ which node
/usr/local/bin/node
$ node -v
v0.12.0

動作確認
サンプルコードを書く
example.js

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

起動する

$ node example.js
Server running at http://127.0.0.1:1337/

WEBブラウザからアクセスする。
「Hello World」が表示されれば、OK

備考
いったん node.js のサイト にある MAC用のパッケージをインストールしたから、
brew を試したら、いろいろエラーが出た。

$ brew install node
==> Downloading https://homebrew.bintray.com/bottles/node-0.12.0.mavericks.bottl
######################################################################## 100.0%
==> Pouring node-0.12.0.mavericks.bottle.1.tar.gz
==> Caveats
If you update npm itself, do NOT use the npm update command.
The upstream-recommended way to update npm is:
  npm install -g npm@latest

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/node
Target /usr/local/bin/node
already exists. You may want to remove it:
  rm '/usr/local/bin/node'

To force the link and overwrite all conflicting files:
  brew link --overwrite node

To list all files that would be deleted:
  brew link --overwrite --dry-run node

Possible conflicting files are:
/usr/local/bin/node
/usr/local/share/man/man1/node.1
/usr/local/share/systemtap/tapset/node.stp
/usr/local/lib/dtrace/node.d
Warning: The post-install step did not complete successfully
You can try again using `brew postinstall node`
==> Summary
 /usr/local/Cellar/node/0.12.0: 2196 files, 25M