nodejs
文書の過去の版を表示しています。
node.js
node.jsはノンブロッキングI/Oとイベント駆動が特徴のJavaScript実行環境。イベントループ型のサーバを簡単に実装できる。Chromeブラウザと同じV8エンジンが使用されている。
tips
callbackと例外のアンチパターン
function someAsyncFunc(callback) { // 途中省略... try { callback(); } catch (e) callback(e); } }
try側のcallback中に例外が発生するとcatch側のcallbackが呼ばれるので2回呼ばれてしまう
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 でサーバから送られてきたデータを取得できる }
nodejs.1446788542.txt.gz · 最終更新: 2015/11/06 05:42 by nullpon