web-dev-qa-db-ja.com

フェイvs. Socket.IO(およびジャガーノート)

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

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

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

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

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

フェイはおそらくジャガーノートに比べてはるかに複雑に見えます。トランスポートネゴシエーションをSocket.IOに委任し、メッセージルーティングをRedisに委任します。これらはどちらも素晴らしい決定ですが、Bayeuxを使用するという私の決定は、自分でもっと作業をする必要があることを意味します。

設計哲学に関しては、Fayeの最優先の目標は、Webが利用可能なすべての場所で機能し、使用するのは絶対に簡単であるべきだということです。始めるのは本当に簡単ではありませんが、その拡張性は、非常に強力な方法でカスタマイズできることを意味します。たとえば、認証拡張機能を追加することで、サーバーからクライアントへのプッシュサービスに変換できます。 。

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

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

121
jcoglan
  1. AFAIK、はい、Juggernautは永続性ではなく、PubsubにRedisのみを使用しているという事実は別として。また、ほとんどの言語のクライアントライブラリが既に記述されていることを意味します(Redisアダプタが必要なためです)。
  2. JuggernautはBayeuxを実装していませんが、非常にシンプルなカスタムJSONプロトコルを持っています
  3. おそらくダンノ
  4. Juggernautは非常にシンプルで、そのように設計されています。私はFayeを使用していませんが、ドキュメントからは、PubSubだけでなく多くの機能を備えているようです。 Juggernautは、Socket.IOの上に構築されていることにも利点があり、デスクトップとモバイルの両方のほぼすべてのブラウザーでサポートされています。

フェイの著者が言っていることに本当に興味があります。私が言うように、私はそれを使用していないので、ジャガーノートと比較する方法を知ることは素晴らしいことです。おそらく、仕事に最適なツールを使用する場合です。 pubsubが必要な場合、Juggernautは非常にうまく機能します。

13
Alex MacCaw

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

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

3
Guillermo Rauch