先日 Perl + AnyEvent で作った TwitterのChirpUserStreamsをダラ流しするWebApp を、node.js で作ってみました。
node.js というのは、「JavaScript V8 Engineでイベント駆動I/Oなネットワークサーバを書くためのフレームワーク(実行環境)」ということでいいんでしょうかね。
# インストールは ./configure && make && make install で終わるので詳細割愛
イベント駆動IOを使って、以下のような処理を1プロセスで行います。
- CharpUserStream から流れてくる JSON を取得して
- node.js 組み込みの httpd のレスポンスに渡す
- ブラウザは Long poll して node.js から JSON を取得して画面描画
実際動いてるのを動画で見るとこんな感じです。左側のウィンドウが node.js の httpd に接続しているブラウザです。
ソースコードはGistに貼っておきます。
JavaScript が100行弱と、HTML で2ファイル。 同一ディレクトリに置いて
$ node client.js
で twitter API client と httpd が動作するので、ブラウザで http://localhost:5000/ に接続してください。
書いてみた感想としては、IO が全部イベントドリブンなので、ファイルを読み込むのも全て Listener を設定して callback する必要があるのが若干面倒かなとか。blockするとパフォーマンス劣化に直結するので仕方ないですが。
ロジックをサーバ側からブラウザ側に移す場合に、コピペできるのは楽ですね。以前の Perl 版は HTML 生成までサーバでやってたのを、今回は JSON 投げるだけにしてブラウザ側で JSON の解釈をしています。
実用的には諸々のライブラリが充実しないと、既存のサーバを置き換えるのはなかなか大変だとは思いますが、既に Expressというフレームワーク も出てきたりしているので要注目、というところでしょうか。