(lukaszの記事の日本語版です。英語版はこちら)
今日から“lancers|conf”というものを始めました。![]()
“lancers|conf”は2週間に1回、メンバーの1人が最新のITに関する技術やウェブサイトやアイデア等をプレゼンするというものです。
1回のミーティングは10~15分で、プレゼン7分と質疑応答を行います。
なぜプレゼンが7分なのかというと、アインシュタインが言うには、
「シンプルに説明できないことは、十分理解していないことだ(“If you can’t explain it simply, you don’t understand it well enough”)」
だからです。
今日のトピックは“NodeJS, WebSockets and the real-time
web”でした。
このブログでは、NodeJSとは何か、どこで、なぜ使われているかについて解説したいと思います。そしてサンプルコードとして、NodeJS with WebSocketsで作られたシンプルなリアルタイムチャットを紹介します。
NodeJSとは?
簡単に言うと、NodeJSはJavaScriptで書かれたサーバーサイドのソフトウェアシステムです。
主な特徴は、以下の3点です。
- イベント駆動形のプログラミング
- 非同期IO(データの送受信の完了を待たずに他の処理を開始する方式)
- 簡単に拡張ができる
そして何よりも、NodeJSは極めて早いです。
どこで使われている?
NodeJSが最適なのは以下の分野です。
|
WebSocketsについて
WebSocketはサーバーとクライアントのリアルタイムコミュニケーションを提供します。簡単に説明するために、ユーザー間のメッセージ交換サービスを例に、一般的なHTTPとWebSocketsを比較してみたいと思います。
一般的なHTTP
ユーザーが他のユーザーからの新しいメッセージを読むには、サーバーにリクエストを送らなければいけません(F5でページをリロードします)。その結果リクエストは急激に増えていきます。ページ全体を毎回転送するので効率が悪いです。

一般的な HTTP + AJAX
クライアントはリクエストを送り続け (例えば、100ミリ秒ごと) 、レスポンスを待ち続けます。これも効率的ではありません。

WebSockets
クライアントは何もする必要はありません。もし新しいメッセージがあれば、サーバーは直接クライアントに送ります。その結果、リクエスト数はとても少なくて済みます。

コードサンプル
下のようなシンプルなリアルタイムチャットサービスは、ほんの数行で作ることができます。
サーバー側(app.js)
// 環境設定
var express = require('express'),
socketIo = require('socket.io'),
http = require('http'),
app = express().use(express.bodyParser()),
server = http.createServer(app);
// サーバーを開始し、WebSocketを開く
server = server.listen(3000);
var io = socketIo.listen(server);
// クライアント -> クライアントのコミュニケーション
io.sockets.on('connection', function(socket) {
// サーバーは'broadcast' イベントを受信
socket.on('broadcast', function(data) {
console.log(data);
// すべてのクライアントにデータとともにイベントを送信
io.sockets.emit('broadcast', data);
});
});
クライアント側 (index.html)
var socket = io.connect('http://localhost:3000/');
// 'broadcast'イベントの受信
socket.on('broadcast', function (data) {
console.log(data.message);
// 何かする
});
// メッセージが入った'broadcast'イベントの発信
socket.emit('broadcast', { message: 'hoge' });
長所と短所
長所
- とても簡単に学べる(JavaScript)
- データ送信サービスを簡単に発展・展開できる
- リアルタイムコミュニケーション(WebSockets、データストリーミング)が簡単にできる
短所
- すべてのサービスに向いているわけではない。
eコマースサイトには向いてないでしょう
リンクとソース
NodeJS オフィシャルサイト
http://nodejs.org
NodeJS 日本語Wikipedia
http://ja.wikipedia.org/wiki/Node.js
Google V8 Engine
http://ja.wikipedia.org/wiki/Google_V8_JavaScript_Engine



0 Comments until now.
Comment!