ハマったのでメモです。 ストリーミング処理の落とし穴 Mongoose(MongoDBのODM)を使って、コレクションからほんの10万ほどのドキュメントを処理するスクリプトを実行した時でした。処理が固まってしまうのです。なぜでしょう? 各ドキュメント処理では、コールバックを伴う非同期的な処理を含みます。 問題のCoffeeScriptのコードは以下のようなイメージです: Foo.find() .sort value:-1 .stream() .on 'data', (d)-> someTask d someTask = (d)-> doAwesomeJob (result)-> console.log "Great!" モデルFooのドキュメントを全て読み込み、各ドキュメントをストリームに流し込んでいます。 メモリを節約するためにストリームの手法を採用しています。 doAwesomeJob
並行処理をプログラミングする方法は大別すると、 スレッドなどを利用した同期処理的な書き方と イベントを利用した非同期処理的な書き方があります (イベントループ)。 最近 C10K問題 が有名になったことや、 Node.js が流行っていて Node.js のメリットとしてイベントモデルであるため C10Kが解決されるというのが上げられていたりして、 イベントモデルのスレッドに対する優位性が注目されることが多いように思います。 しかし個人的な経験として、ある程度以上複雑なプログラムを書く場合、 イベントモデルで非同期処理を多用してプログラムを書くとスレッドで同期処理を使ってプログラムを書いた場合に比べてプログラムの可読性・保守性が著しく悪くなり、 バグが発生しやすくなるように感じます。 しかも並行処理で起こるバグは特定の処理が特定の順序で実行された場合のみ起こるようなことが多く、 再現性が低
wsモジュール wsモジュールは、WebSocketプロトコル(RFC-6455に準拠する)の実装ライブラリです。 socket.ioのように多機能ではありませんが、シンプルな作りで非常に高速に動作するのが特徴です。 ※socket.ioも内部でwsを使用しています 環境構築方法 今回使用した動作環境は以下のとおりです。 OS : MacOS X 10.7.4 Node.js : v0.8.15 npm : 1.1.66 適当なディレクトリを作成し、そこでnpmを使用して必要モジュールをインストールします。 今回はexpressも使用するので、いっしょにインストールしましょう。 % mkdir ws % cd ws % npm install ws express wsモジュールを使ったチャット ありふれた例ですが、wsモジュールとexpressモジュールを使用してシンプルなチャットをつく
ちょっとSocket.ioを導入する機会があったので、色々調査したのをメモしておきます。 Socket.ioとは node.jsのnpmとして提供されている、WebSocketを手軽に扱えるモジュールです。 多分すごい有名なので、だいたいみなさん知ってると思います。 他にはwebsocket-serverとかもあるんですが、こっちの方が有名ですかね。 特徴として、クライアントサイドのトランスポートがクロスブラウザなところでしょうかね。とても助かります。 詳しいところは公式サイトを見るといいと思います。 Socket.IO: the cross-browser WebSocket for realtime apps. すんごい出たばっかりの頃にも触ったことがあったんですが、今使ってみると機能がすごい増えててびっくり。 機能の紹介とかは他のサイトを見てもらうとして、備忘録的に自分がやった所なん
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く