2012-03-29 13 views
4

Storm(IDEではなくリアルタイムフレームワーク)を使用してWebクローラーを構築すると評価しています。 My SpoutはURIのストリームを配信します。これは、最初のBoltで呼び出され、取得されなければならず、これはPHPで書かれています。StormでPHPを使用した非ブロッキングHTTPコール

node.jsの背景から来ていますが、私は、コールバックを使用して非ブロッキングな方法でそのような機能を構築できることを知っています。私の素朴なアイデアは、ボルトのためにたくさんのタスクを設定するだけで、いくつかのタクが答えを待っている間にリソースを完全に使用できるようにすることです。問題は、phpが各プロセスに多くのリソースを割り当てることになっていることはよく知られており、Stormがそれを内部的にどのように管理しているか、そしてこれが良い考えであるかどうかはわかりません。

この環境でnode.jsのような動作が可能ですか?あるいは、私はこのボルトがそれを達成するために別の言語に切り替える必要がありますか?もしそうなら、私はそれをどうやって行いますか?

答えて

1

私はJavaではあるが、ストーム&ノンブロッキングHTTPコールを使用するWebクローラを作成しました。私たちはプロダクションでそれを使用していて、かなりうまくいきます。

私たちは、スパウトからURLのストリームを受け取り、クローラのボルトに送ります。各ボルトは非ブロッキングHTTPリクエストを生成し、出力コレクタに結果を出力するコールバックを登録します。私。はい、ストームで非ブロックIOを行うことができます。

私はPHP開発に精通していないので、それほどコメントすることはできませんが、あなたが何をしようとしても、プロセス間メッセージングのためにJVMベースの言語に比べて非常に貧弱です。

注:最近のバージョンのStormでは、出力コレクタはスレッドセーフではなくなっています。したがって、非同期でスムーズに放出するときに、出力コレクタを同期させてください。

関連する問題