2011-06-25 14 views
0

異なるスクリプト言語を使用する以外に、node.jsの主な魅力は、スケーラブルなサーバーを書くことを容易にするイベントドリブンプログラミングのサポートです他の典型的には入出力バインドされたアプリケーション)を提供する。しかし、この機能は、コールバック関数の後にコールバックを渡す必要がある新しいプログラミングモデルを学ばなくてはなりませんが、いくつかの簡単なタスク(例えば、依存する一連のアクション)がもう少し複雑になります。非同期性、スレッド化、node.js、Ruby on Rails

Ruby on Railsの従来のプログラミングモデルとは対照的に、すべてのI/O操作をブロックし、(効果的に)シングルスレッド化されています(MRIのグリーンスレッド実装のため)。

ちょうど大声ここに夢を見て、現在の保存、自分の非ブロッキングバージョンに置き換える透過的に、I/O呼び出しをトラップすることにより、これらのモデルを調和させるルビー(またはレール)ランタイムを実装することが可能であるべきと思われますI/O操作が完了したときに呼び出すことができます。このようにして、使い慣れた手続き型プログラミングスタイルと、イベントドリブン/非同期/コールバックモデルの利点を得ることができます。

このようなランタイム(またはランタイムトランスレータ)は技術的に可能ですか?このようなことを既に行っているWebフレームワークはありますか?

+0

Illya Grigorikは、ルビファイバ、EventMachine、およびレールでいくつかの作業を行っています。これを見てください(特に下のリンク):https:// github。com/igrigorik/async-rails – igorw

+0

@igorw:これは私が考えていたことを非常によく表しています。 – maerics

+0

レールを非同期にすることは、私にとってはハックのようです。それは挑戦的に、ひどくリークする抽象化のように見えます。 – Raynos

答えて

0

@igorwのおかげで、async-railsプロジェクトは私が想像していたものです。

@Raynosと@apneadivingには、Ruby EventMachinestormjsのような潜在的に良い解決策があります。

2

はい。

非同期が、命令型プログラミング

利用本当の非同期言語を行うための2つの可能性があります。

Erlangのは、あなたがこれを行うに不可欠書くそのコードを実行できる一例となり、それがに変換非同期。私はそれがすべての方法を行くとは思わない。

使用コンパイラ

あなたは、非ブロッキングコードにスタイルコードを遮断変換し、コンパイラを使用することができます。私は個人的にはと高く、は、これをブラックボックスとデバッグする悪夢のために勧めています。

一例はstorm

だろうただし、この機能は、本質的にいくつかの簡単なタスクを行うコールバック関数の後にコールバックを渡す必要があり、新しいプログラミングモデル(の例えば依存シーケンスを学ぶことを犠牲にしてアクション)少し複雑です。

ただし、弾丸を噛んでパラダイムスイッチを切り替えることをお勧めします。これは長期的にはるかに良い投資になるでしょう。 node.jsを使用する必要はないことに気をつけてください。erlangやhaskellのような強力な選択肢があります。