初めての投稿です。よろしくお願いします。
最近、Flash又はUnity3Dで作ったMMORPGやHTML5で作ったFPSゲーム(Quake)等、ウェブブラウザでリアルタイムに動くアプリケーションを開発できる技術が発展していますので、
今日はリアルタイムのウェブアプリを作る為の技術の中でServer側の技術である、node.jsに対して話してみたいと思います。
< node.jsとは >
node.jsはgoogleのすごく速いインタープリターであるV8 javascript engineを基盤で作られたサーバーサイドのJavascriptです。Javascriptでゲームサーバー等を作成できると言う意味です。
node.jsはV8エンジンが持っている長所(速さ、高効率のガベージコレクション等)の上に、OSのようなevented, non-blocking I/Oを提供します。
Evented I/Oとは入出力処理で処理がブロックされないように入出力処理を全て非同期で扱うようになっていると言う意味で、Event Loopを利用して動作を要請する時Callbackを指定して動作が終わるとCallbackが実行される仕組みです。
node.jsではひとつのプロセスでEvent Loopを利用して多くのHTTPコネクションを扱う動作モデルを取っているので、高トラフィック(=多数のユーザ)を効率良く扱えます。接続数が多ければ多いほど、1つのコネクション当りに別のThreadを実行する方式に比べて、メモリの節約や安定性や性能が高いです。
Evented I/Oとは入出力処理で処理がブロックされないように入出力処理を全て非同期で扱うようになっていると言う意味で、Event Loopを利用して動作を要請する時Callbackを指定して動作が終わるとCallbackが実行される仕組みです。
node.jsではひとつのプロセスでEvent Loopを利用して多くのHTTPコネクションを扱う動作モデルを取っているので、高トラフィック(=多数のユーザ)を効率良く扱えます。接続数が多ければ多いほど、1つのコネクション当りに別のThreadを実行する方式に比べて、メモリの節約や安定性や性能が高いです。
< node.jsのインストール >
node.jsとNPM(Nodejs Package Manager)の設置が必要です。
・Fedora
node.jsとNPM(Nodejs Package Manager)の設置が必要です。
・Fedora
sudo yum localinstall --nogpgcheck http://nodejs.tchol.org/repocfg/fedora/nodejs-stable-release.noarch.rpm
sudo yum install nodejs-compat-symlinks npm
・CentOS
https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager
※Windows、OSXの場合はhttp://www.nodejs.org/でInstallerをダウンロードして設置する方が便利です。
・設置が完了できたら、shellにnodeやnpmを入力して確認して見ましょう。
・もしエラーが出たら、Path問題の可能性が高いので、
> export NODE_PATH=/インストールPATH/node_modules:$NODE_PATH
等でPATHを環境変数に追加してください。
< チュートリアル >
wget http://nodejs.tchol.org/repocfg/el/nodejs-stable-release.noarch.rpm
yum localinstall --nogpgcheck nodejs-stable-release.noarch.rpm
yum install nodejs-compat-symlinks npm
・Amazon Linuxsudo yum localinstall --nogpgcheck http://nodejs.tchol.org/repocfg/amzn1/nodejs-stable-release.noarch.rpm
sudo yum install nodejs-compat-symlinks npm
※Debian, Ubuntu, openSUSE等のOSでのインストールもリンクを参考してください。https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager
※Windows、OSXの場合はhttp://www.nodejs.org/でInstallerをダウンロードして設置する方が便利です。
・設置が完了できたら、shellにnodeやnpmを入力して確認して見ましょう。
・もしエラーが出たら、Path問題の可能性が高いので、
> export NODE_PATH=/インストールPATH/node_modules:$NODE_PATH
等でPATHを環境変数に追加してください。
< チュートリアル >
簡単なWeb ServerやTCP ServerのSampleを作成して見ます。
[Web Server]
#Server側
[Web Server]
#Server側
・hello_server.jsと言うファイルを作成します。
01.var http = require('http'); 02. 03.http.createServer(function(request, response) { 04. response.writeHead(200, {'Content-Type': 'text/html'}); 05. response.write('Hello, World~!!'); 06. response.end(); 07.}).listen(1337); 08. 09.console.log('Server running at http://localhost:1337/');
line03:web serverのObjectを生成。callbackをanonymous function形で指定。
line04:response headerを伝送。
line04:response headerを伝送。
line05:文字列’Hello, World~!!’を伝送。
line07: listenerがrequestイベントが発生する時、callbackを実行。
・作成したserverを実行します。
line07: listenerがrequestイベントが発生する時、callbackを実行。
・作成したserverを実行します。
>node hello_server.js
Server running at http://127.0.0.1:1337/
#Client側
・Web browserでserverに接続して見ます。
[TCP Server]
#Server側
・tcp.jsと言うファイルを作成します。
01.var tcp = require('net'); 02. 03.var server = tcp.createServer(); 04. 05.server.on('connection', function(e) { 06. e.write('hello!\n'); 07. e.end();}); 08. 09.server.listen(8000);
line03:tcp serverのObjectを生成。
line05:'connection'イベントが発生すると、'hello!'を伝送。