102

Socket.IOは、最も人気がありアクティブな WebSocket エミュレーション ライブラリのようです。Juggernautはこれを使用して、完全な pub/sub システムを作成します。

Fayeも人気があり、アクティブであり、独自の JavaScript ライブラリを持っているため、完全な機能は Juggernaut に匹敵します。Juggernaut はサーバーにノードを使用し、Faye はノードまたはラックのいずれかを使用できます。Juggernaut は永続化のために Redis を使用し (修正: pub/sub には Redis を使用)、Faye は状態をメモリに保持するだけです。

  1. 上記はすべて正確ですか?
  2. Faye はBayeuxを実装していると言います -- Juggernaut はこれをしないと思います -- それは Juggernaut がより低いレベルだからです (IE, 私は Juggernaut を使って Bayeux を実装することができます)
  3. Faye は、必要に応じて、Socket.IO ブラウザの JavaScript ライブラリを使用するように切り替えることができますか? それとも、JavaScript ライブラリは根本的に異なることを行うのでしょうか?
  4. プロジェクト間の建築/デザイン/哲学の違いは他にありますか?
4

3 に答える 3

122

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

  1. フェイに関しては、あなたが言ったことはすべて真実です。
  2. Faye は Bayeux のほとんどを実装していますが、現時点で欠けているのはサービス チャネルだけです。特に、Faye は Bayeux の CometD 参照実装と互換性を持つように設計されており、これは以下に大きな影響を与えます。
  3. 概念的には、はい: FayeはSocket.IO を使用できます。実際には、これにはいくつかの障壁があります。
    • Socket.IO がどのようなサーバー側サポートを必要とするのか、Faye クライアント (Node と Ruby にはサーバー側クライアントがあることを思い出してください) が任意の Bayeux サーバー (および Fayeサーバーから任意の Bayeux クライアントへ) は契約を破る可能性があります。
    • Bayeux には、サーバーとクライアントが特定のトランスポート タイプをサポートするための特定の要件があり、どちらを使用するかをネゴシエートする方法が示されています。また、XHR リクエストの Content-Type がコンテンツの解釈方法にどのように影響するかなど、それらの使用方法も指定します。
    • 一部のタイプのエラー処理では、トランスポートに直接アクセスする必要があります。たとえば、Node WebSocket の終了後にクライアントが再接続したときにメッセージを再送信する場合です。
    • 間違いがあれば訂正してください - これは Socket.IO のドキュメントをざっとスキャンした結果に基づいています。
  4. Faye は単なる pub/sub であり、もう少し複雑なプロトコルに基づいており、多くの優れた機能が組み込まれています。
    • サーバー側とクライアント側の拡張機能
    • チャネル ルートでのワイルドカード パターン マッチング
    • WebSocket が停止したり、サーバーがオフラインになった場合などの自動再接続
    • クライアントは、すべてのブラウザー、電話、および Node と Ruby のサーバー側で動作します

Faye はおそらく Juggernaut に比べてはるかに複雑に見えます。Juggernaut はより多くの委任を行うためです。たとえば、トランスポート ネゴシエーションを Socket.IO に委任し、メッセージ ルーティングを Redis に委任します。どちらも良い決断ですが、バイユーを使用するという私の決断は、自分自身でより多くの仕事をしなければならないことを意味します。

設計哲学に関して言えば、Faye の最も重要な目標は、Web が利用可能なあらゆる場所で動作し、簡単に操作できるようにすることです。使い始めるのは本当に簡単ですが、その拡張性により、非常に強力な方法でカスタマイズできることを意味します。たとえば、認証拡張機能を追加することで、サーバーからクライアントへのプッシュ サービスに変えることができます (つまり、任意のクライアントがプッシュするのを停止します)。 .

サーバー側でより柔軟にするための作業も進行中です。クラスタリング サポートを追加し、コア pub-sub エンジンをプラグ可能にして、Faye を Redis や AMQP などの別の pub-sub システムのステートレス Web フロントエンドとして使用できるようにすることを検討しています。

これがお役に立てば幸いです。

于 2011-02-04T11:02:36.800 に答える
13
  1. 私の知る限り、はい、Juggernaut が永続性ではなく、Pubsub に Redis のみを使用しているという事実は別として。また、ほとんどの言語のクライアント ライブラリが既に作成されていることも意味します (必要なのは Redis アダプターだけであるため)。
  2. Juggernaut は Bayeux を実装していませんが、非常に単純なカスタム JSON プロトコルを備えています。
  3. わからないけど多分
  4. Juggernaut は非常にシンプルで、そのように設計されています。私は Faye を使用したことはありませんが、ドキュメントを見ると、PubSub 以外にも多くの機能があるようです。Socket.IO の上に構築されていることにも利点があり、Juggernaut はデスクトップとモバイルの両方の実質的にすべてのブラウザーでサポートされています。

Faye の作者が何を言おうとしているのか、とても興味があります。私が言うように、私はそれを使用したことがないので、Juggernaut と比較してどうなのかを知ることは素晴らしいことです. それはおそらく、仕事に最適なツールを使用する場合です。必要なのが pubsub である場合、Juggernaut は非常にうまく機能します。

于 2011-02-04T04:26:26.307 に答える
3

フェイは確かにそうすることができました。Socket.IO の上にある同様のプロジェクトの別の例:

https://github.com/aaronblohowiak/Push-It

于 2011-02-04T01:54:57.367 に答える