2011-02-04 9 views
98

Socket.IOは、最も一般的でアクティブなWebSocketエミュレーションライブラリのようです。 Juggernautは完全なpub/subシステムの作成にこれを使用します。Faye vs. Socket.IO(およびJuggernaut)

Fayeも人気があり、アクティブで、独自のjavascriptライブラリがあり、完全な機能をJuggernautに匹敵します。 Juggernautはそのノードにノードを使用し、Fayeはノードまたはラックのいずれかを使用できます。 Juggernautは永続性のためにRedisを使用します(修正:はpub/subにRedisを使用します)。

  1. 上記の内容はすべて正確ですか?
  2. フェイはそれがBayeuxを実装言う - 私はジャガーノートはこれをしないと思う - ジャガーノートは低いレベルであるので(IE、私はジャガーノートを使用してバイユーを実装することができます)ということである
  3. は、フェイはSocket.IOブラウザのJavaScriptを使用するように切り替えるでしたもし望むならライブラリ?あるいは、彼らのJavaScriptライブラリは根本的に異なるものですか?
  4. プロジェクト間に他のアーキテクチャ/設計/哲学の違いはありますか?
+3

ジャガーノートは廃止されました。なぜhttp://blog.alexmaccaw.com/killing-a-libraryを読んでください。 – Maziyar

+0

HTML 5 Server-Sentイベントは、Juggernautの著者 – Harindaka

答えて

117

開示:私はフェイの著者です。

  1. あなたが言ったことはすべて真です。
  2. FayeはBayeuxのほとんどを実装していますが、現在欠けているのはサービスチャネルだけです。これは私がまだ有用性を確信していないものです。特にFayeは、以下に大きな影響を与えるBayeuxのCometDリファレンス実装と互換性があるように設計されています。
  3. 概念的には、はい:Faye はSocket.IOを使用できます。実際には、これにいくつかの障壁があります:
    • 私はどのような種類のサーバーサイドソケットSocketをサポートしているのか分かりません。IOが必要であり、Fayeクライアント(ノードとRubyのサーバ側クライアントがあることを覚えておいてください)がBayeuxサーバ(とBayeuxクライアントのFayeサーバ)と話すことができることが条件です。
    • バイユーには、サーバーとクライアントが特定のトランスポートタイプをサポートするという特定の要件があり、どちらを使用するかをどのように交渉するかが示されています。また、XHR要求のContent-Typeがコンテンツの解釈方法に与える影響など、コンテンツの使用方法も指定します。
    • エラー処理の種類によっては、トランスポートに直接アクセスする必要があります(例:resending messages when a client reconnects after a Node WebSocket dies)。
    • これが間違っていたら私を修正してください。これは、Socket.IOのマニュアルの大まかなスキャンに基づいています。
    • フェイはちょうど/サブパブです
  4. 、それはちょうど少し複雑なプロトコルに基づいており、内蔵の細かな点をたくさん持っていますが:
    • サーバー - クライアント側の拡張
    • ワイルドカードパターンマッチングチャンネル上のルート
    • 自動再接続、たとえばノードとRubyにWebSocketを死ぬか、サーバーがオフラインになっ
    • クライアントは携帯電話で、すべてのブラウザで動作し、サーバ側のとき

フェイは、おそらくジャガーノート理由ジャガーノートに比べて、より多くの複雑に見えますより多くの代表者Socket.IOへの転送ネゴシエーションとRedisへのメッセージルーティングを委任します。これらはどちらも素晴らしい決定ですが、Bayeuxを使用するという私の決断は、自分でもっと仕事をしなければならないということです。

デザインの考え方として、フェイの最優先目標は、Webが利用できるあらゆる場所で動作する必要があり、進化するためには絶対に自明でなければならないということです。私は本当にシンプルですが、その拡張性は非常に強力な方法でカスタマイズできることを意味します。たとえば、認証拡張機能を追加することで、それをサーバーツークライアントプッシュサービスにすることができます。

サーバ側で柔軟性を高める作業も進行中です。私はクラスタリングのサポートを追加し、コアのpub-subエンジンをプラガブルにして、RedayやAMQPのような別のpub-subシステムのためのステートレスなWebフロントエンドとしてFayeを使うことができるようにしています。

これは役に立ちましたと思います。

+1

素晴らしい答えをありがとう。私はBayeuxプロトコルの柔軟性を理解していませんでした。つまり、任意のクライアントが任意の/複数のサーバと通信できるはずです。これを完全に活用しているプロジェクトやプロダクションサービスについて知っていますか? –

+4

私は最近、Socket.IOからFayeに移りました.Fayeが私のアプリケーションを保存したと言わなければなりません。シンプルなFayeサーバーと中規模のサーバーで、私のアプリケーションはGoogleアナリティクスによると同時に6000ユーザーを処理できます –

13
  1. 私の知る限り、はい、離れて事実からジャガーノートだけではない永続性、PubSubのためのRedisを使用しています。また、ほとんどの言語のクライアントライブラリは既に(Redisアダプタが必要なので)既に書かれています。
  2. ジャガーノートは、バイユーを実装するのではなく、非常に単純なカスタムJSONプロトコル
  3. 知らんを持っていない、おそらく
  4. ジャガーノートは非常に簡単で、かつそのようになるように設計します。私はFayeを使用していませんが、ドキュメントからはPubSubよりもはるかに多くの機能があるようです。 Socket.IOの上に構築されていることも利点があります.Juggernautはデスクトップとモバイルのほぼすべてのブラウザでサポートされています。

私は本当にフェイの著者が言っていることに興味があります。私が言うように、私はそれを使用していないし、それがJuggernautとどのように比較するのか知ることは素晴らしいだろう。これは、おそらくジョブのための最高のツールを使用する場合です。あなたが必要とするパブであれば、ジャガーノートはそれをとてもうまくやっています。

+0

によれば推奨される代替手段のようです。私はRedisがそのpub/sub機能のためだけに使用されていたことを知らなかった。私はこれを尋ねた:http://stackoverflow.com/questions/4938520 –

関連する問題