share facebook facebook twitter menu hatena pocket slack

2011.09.28 WED

WebSocketってなんじゃ?(Node編1 node.jsのインストール)

三浦 悟

WRITTEN BY 三浦 悟

少し遅れた内容になりますが、Nodeについて紹介します。
Node.jsは、非同期イベント駆動モデルのサーバーサイドJavaScript環境で、非ブロッキングI/O(入出力が完了しないうちに他の処理を開始できる)という方式になります。
これにより、クライアントからの多数のリクエストを短時間で処理することが可能です。

Node.jsではWebSocketを利用することにより双方向でメッセージを送信することができるようになります。
サーバーからクライアントに情報を渡す仕組みとしては、Ajaxがポーリングにより毎回コネクションを生成したり、Cometのロングポーリングによる擬似プッシュを実現しているのに対して、WebSocketは一度コネクションが生成されたらそのコネクション上で何度でも双方向にメッセージ送信を本格的なプッシュで行えるため、サーバーのリソースもクライアントの待機時間も節約することができます。

それでは早速、nodeをインストールしてみます。

$ mkdir -p ~/src/git
$ cd ~/src/git/
$ git clone --depth 1 git://github.com/joyent/node.git
$ cd node
$ git checkout v0.4.11
$ ./configure
$ make
# make install

インストールが完了したら、以下のようなサンプルを作ってみます。

$ vi hello.js
~
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Worldn');
}).listen(1337);
console.log('Server is running');
~

そして、実行します。

$ node hello.js
Server is running

※AWS上で構築している場合はSecurityGroupでTCPの1337を開放する必要があります。

ここで、クライアント(Mac)のコンソールで以下のようにアクセスしてみます。

$ curl http://xx.xx.xx.xx:1337/
Hello World

次に、先程のhello.jsを以下のように書き換えて実行してみます。

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write("Hellon");
  setTimeout(function(){
    res.end('This is the node World !!!!n');
  }, 10000);
}).listen(1337);
console.log('Server running');

同じようにアクセスしてみます。

$ curl http://xx.xx.xx.xx:1337/
Hello

すると、一旦ここまでレスポンスが表示され、10秒後、下記のように This is the node World !!!! が追加で表示されます。

$ curl http://xx.xx.xx.xx:1337/
Hello
This is the node World !!!!

この時サーバークライアント間では、2つめのワードが返る間もコネクションが維持され、しかもサーバーはその間スループやロックやビジーになることなく他のアクセスの処理などを行うことが可能です。

見た目にはたったこれだけの違いなのですが、これによりとても多くの可能性をもつことになり様々な応用が期待できます。

こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら

三浦 悟

三浦 悟

高円寺在住のなんじゃ系男子 またの名をmemorycraftといいます。 炭水化物大好き 日々の「なんじゃ?」を記事にしてます。