nodejs
文書の過去の版を表示しています。
node.js
node.jsはノンブロッキングI/Oとイベント駆動が特徴のJavaScript実行環境。イベントループ型のサーバを簡単に実装できる。Googleが開発し、Chromeブラウザと同じV8エンジンが使用されている。
node.jsはCommonJSというサーバサイドJavaScriptの仕様にしたがっている。
HTML5 の Server-Sent Events を実装してみる
node.jsでServer-Sent Eventsを試す - nullpo.printStackTrace();
サーバ側を node.js で実装してみる。
generator.js
// EventEmitterを取得 var events = require("events"); var emitter = new events.EventEmitter(); // EventEmitterを拡張 emitter.id = 0; emitter.data = ""; emitter.start = function() { var chars = "node.js"; var self = this; setInterval(function() { var pos = Math.floor(Math.random() * chars.length * 2); if (pos < chars.length) { self.id++; self.data = chars.charAt(pos); // generatedイベントとして登録されたリスナを呼び出す self.emit("generated", self.id, self.data); } }, 1000); }; // module.exportsに設定されたオブジェクトがrequireの戻り値となる。 module.exports = emitter;
server.js
var http = require("http") http.createServer(handler).listen(8124); var generator = require("./generator") generator.start(); function handler(req, res) { function response(id, data) { generator.removeListener("generated", arguments.callee); res.writeHead(200, { "Content-type": "text/event-stream" }); res.write("id:" + id + "\n"); res.write("data:" + data + "\n"); res.write("retry: 1000"); res.end(); } generator.on("generated", response); }
クライアント側のJavaScript
var source = new EventSource(url); source.onmessage = function(event) { // データ受信時の処理を書く // event.data でサーバから送られてきたデータを取得できる }
実装サンプル、Gitで取得できます。
$ git clone http://dev.paulownia.jp/git/sse.git $ cd sse $ node server.js
nodejs.1317199121.txt.gz · 最終更新: 2011/09/28 08:38 by nullpon