web-dev-qa-db-ja.com

EventMachineとNode.js

共同編集サイトを開発します。機能の1つは、リアルタイムの変更を伴う共同編集です。つまり、2人以上のユーザーが同じドキュメントを編集している場合、変更が発生するとすぐにお互いの変更を確認できます。 RailsでRubyを使用した経験があるので、EventMachineを使用することを考えていましたが、Node.jsに関するこのような誇大宣伝により、代わりに使用することを検討しています。 EventMachineの代わりにNode.jsを使用する主な利点は?

tl; dr EventMachineとNode.js(言語以外)の主な違いは何ですか?

30
Pablo B.

EventMachineは、両方が同じ言語で書かれていることを除けば、Railsとは何の関係もありません。 EventMachineはNode.jsと同じくらい裸で入手できます。あなたがしなければならないのはあなたのプロジェクトにライブラリを追加することだけではありません。私の経験では、EventMachineライブラリ(em-httpなど)はNodeの何よりも優れています。また、コールバックの代わりにファイバーを使用して、コールバックの地獄を回避できます。 Nodeでは、すべてのコールバックがあるため、完全な例外処理はほとんど不可能です。さらに、Rubyは、Javascriptよりも優れた完全な言語です。

72
Phil Kulak

私は「あなたが知っているものを使う」傾向があります(たとえそれがより重いアーキテクチャであっても)。そのため、「EventMachinevsNodeJS」ほど単純ではないと思います。主に、違いは次のように要約できます。

  • NodeJSは、JavaScriptでイベントベースのプログラミングを処理するために作成されたフレームワーク/言語です。それがその原動力です。それは後から考えたものでも、サードパーティのメカニズムでもありません。それはその言語にぴったりと焼き付けられています。言語が構築される方法であるため、コールバック/イベントを作成します。これはサードパーティのプラグインではなく、ワークフローを変更することはありません。
  • EventMachineはRubyの宝石であり、開発者がイベントベースのプログラミングモデルの優れた点にアクセスできるようにします。頻繁に使用され、十分にテストされていますが、言語に直接組み込まれていません。どちらも1つのCPUにロックされていますが、ノードコアでのイベントプログラミングにより、まだ足がかりがあります。 Rubyは並行性を念頭に置いて書かれていません。

とはいえ、技術的な問題は克服できます。あなたの決定を導くべきである(私の見解からの)より重要な質問はこれらです:

  • 実稼働環境はどのようになりますか?サーバーを完全に制御できますか?好きなようにホストできますか?それとも、最初は共有システム上にあり、それを拡張する必要がありますか?
  • チームのすべての開発者は、新しい言語を非常に速く学ぶことができますか?中間層のJavaScriptのようなイベントベースの言語をどれくらい速く理解できるでしょうか?
  • Railsが提供するすべてのアーキテクチャ(完全なテストフレームワーク、スキャフォールディング、モデル、コントローラーなど)が必要ですか?それともそれはやり過ぎですか?

2つの間にかなりの数の技術的な違いがあります。 1つは言語であり、もう1つはフレームワークです。本当に、実行したいスタックの重さはどれくらいですか?開発者はどのくらいの学習をしなければなりませんか?使用しない可能性のある多くの優れた機能を提供するフルスタックが必要ですか、それとも、追加のボイラープレートコードを記述して学習する必要がある場合でも、非常に高速かつ同時に実行されるベアボーンセットアップが必要ですか?新しい言語?

Railsは、一部のWebアプリケーションアーキテクチャほど重くはありませんが、NodeJSで同様のスループットを処理する場合よりも多くのプロセッサパワーが必要になります。両方のシステムの品質コードを想定しています。どちらかのスタックに不正なコードが記述されていると、スタックが光りません。それは本当に結局のところ-あなたは本当に物事を行う全く新しい方法を学びたいですか、それともRubyの現在の理解を利用して物事を早く軌道に乗せたいですか?

私はそれが本当に決定的な答えではないことを知っています、しかしこれがあなたを決定に導くのを助けることを願っています!

21

言及する価値のあるものの1つは、制作ストーリーです。 EMは、ほとんどのRackのものと同様に、十分にテストされた多くのテストおよび監視ツールを利用できますが、Node.jsはこの点で十分に不十分です。

これを書いている時点では、Nodeから「スケーリングする必要がありますか」などの質問に答えるために明確なメトリックを取得することはほとんど不可能のようです。Joyentのようなものからそこに形成され始めているオプションがあります、そして常に自分で議論しますが、NewRelicなどのツールの近くには何もありません。

Node.jsは、パフォーマンス/構成可能性の観点からは非常に優れていますが、個人的には本番環境でホストしませんまだ

8
Neil Middleton

Node.js

何が起こっているかを低レベルで制御する方がはるかに優れています。node.jsの上に構築する一般的なライブラリを含めて、抽象化レベルを自分の好みに合わせて微調整できます。たとえば、ビューエンジンを作成するかどうかに応じて、connectまたはexpressを使用できます。クライアント/サーバー接続を抽象化する量に応じて、socket.ioまたはnowを使用できます。多数のMVCライブラリのいずれかを含めるか、独自に作成するかを選択できます。

イベントマシン

Node.jsと同じように非同期IOライブラリ

それは、Ruby vs JavaScriptの設定、抽象化または抽象化の欠如でどれだけの柔軟性が必要か、そしてノードを実際のWebサーバーとして使用するかどうかに帰着します。

3
Raynos