[解決済み] Faye vs. Socket.IO (とJuggernaut)
質問
ソケット.IO は、最も人気があり、活発な WebSocket エミュレーション・ライブラリのようです。 Juggernaut は、完全なパブ/サブシステムを作成するためにこれを使用しています。
フェイ も人気があり、活発で、独自のjavascriptライブラリを持っており、その完全な機能はJuggernautに匹敵します。Juggernautはサーバにnodeを使用しており、Fayeはnodeとrackのどちらかを使用することができます。Juggernautは永続化のためにRedisを使用します( を修正しました。 はpub/subにRedisを使っています)、Fayeは状態をメモリ上に保持するだけです。
- 上記はすべて正確ですか?
- Fayeは、それが実装されていると言っています バイユー -- Juggernautはこれを実装していないと思うのですが、Juggernautの方が下位だからでしょうか?
- Faye は、その気になれば Socket.IO ブラウザーの javascript ライブラリの使用に切り替えることができるでしょうか。それとも、両者の javascript ライブラリは根本的に異なることを行うのでしょうか?
- プロジェクト間には、他にアーキテクチャ、デザイン、哲学の違いがありますか?
どのように解決するのですか?
情報公開:私は「フェイ」の作者です。
- Fayeについて、あなたが言ったことはすべて真実です。
- FayeはBayeuxのほとんどを実装しています。今足りないのはサービスチャンネルだけで、その有用性についてはまだ納得していません。特に Faye は、Bayeux の CometD リファレンス実装と互換性があるように設計されており、これは以下に大きく関係しています。
-
概念的にはそうです: Faye
は
は Socket.IO を使用できます。実際には、これにはいくつかの障壁があります。
- Socket.IOがどのようなサーバーサイドのサポートを必要とするのか見当もつきませんし、Fayeクライアント(NodeとRubyにはサーバーサイドクライアントがありますね)が任意のBayeuxサーバーと(そしてFayeサーバーが任意のBayeuxクライアントと)対話できることが必要ですが、これは破たんするかもしれません。
- Bayeuxは、サーバーとクライアントが特定のトランスポートタイプをサポートするという特定の要件を持ち、どれを使うかをネゴシエートする方法を述べています。また、例えば XHR リクエストの Content-Type がそのコンテンツの解釈にどのように影響するかなど、それらがどのように使用されるかを明記しています。
- ある種のエラー処理のために、トランスポートに直接アクセスする必要があります。 Node WebSocket が終了した後にクライアントが再接続したときにメッセージを再送信する。 .
- これは、Socket.IO のドキュメントをざっと読んだだけですが、間違っているところがあれば訂正してください。
-
Faye は単なる pub/sub で、少し複雑なプロトコルをベースにしており、多くの巧妙な機能が組み込まれています。
- サーバーおよびクライアントサイドの拡張機能
- チャネルルートでのワイルドカードパターンマッチング
- WebSocket が停止したときやサーバーがオフラインになったときなどの自動再接続
- クライアントはすべてのブラウザ、携帯電話、サーバーサイドはNodeとRubyで動作します。
JuggernautはトランスポートネゴシエーションをSocket.IOに、メッセージルーティングをRedisに委ねるなど、より多くの委譲を行うため、Juggernautと比較するとFayeはおそらくより複雑に見えるでしょう。これらは両方とも良い決断ですが、Bayeuxを使うという私の決断は、私自身がより多くの作業をしなければならないことを意味します。
設計思想としては、Fayeの最優先目標は、Webが利用可能な場所ならどこでも動作することであり、絶対に簡単に始められるものでなければなりません。たとえば、認証の拡張機能を追加することで、サーバーからクライアントへのプッシュ サービスに変えることができます (つまり、任意のクライアントからのプッシュを停止させることができます)。
また、サーバー側でより柔軟にするための作業も進行中です。クラスタリングのサポートを追加したり、コアなPub-Subエンジンをプラグイン可能にしたりして、FayeをRedisやAMQPといった別のPub-Subシステム用のステートレスWebフロントエンドとして使えるようにしようと思っています。
お役に立ったでしょうか?
関連
-
[解決済み] socket.ioとnode.jsで特定のクライアントにメッセージを送信する。
-
[解決済み] Long-Polling、Websocket、Server-Sent Events (SSE)、Cometとは何ですか?
-
[解決済み] socket.ioとwebsocketの違いについて
-
[解決済み】HTTP/2はウェブソケットを時代遅れにするのか?
-
[解決済み】WebRTCとWebsocketの比較。WebRTCがビデオ、オーディオ、データを扱えるなら、なぜWebsocketが必要なのですか?[というご質問をいただきました。]
-
[解決済み] Socket.IOの最大同時接続数
-
[解決済み] 1,000,000個のウェブソケットを開き続けるために必要なシステムリソースはどれくらいですか?[クローズド]
-
[解決済み] ロードバランシングウェブソケット
-
[解決済み] Chrome Developer Toolsでwebsocketトラフィックを検査する方法は?重複
-
[解決済み] webhookとwebsocketの違い
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] TraefikでWebSocketをプロキシする方法とは?
-
[解決済み] ライブオーディオストリーミング用Webアプリのアーキテクチャ
-
[解決済み】HTTP/2はウェブソケットを時代遅れにするのか?
-
[解決済み】WebRTCとWebsocketの比較。WebRTCがビデオ、オーディオ、データを扱えるなら、なぜWebsocketが必要なのですか?[というご質問をいただきました。]
-
[解決済み] 1,000,000個のウェブソケットを開き続けるために必要なシステムリソースはどれくらいですか?[クローズド]
-
[解決済み] ロードバランシングウェブソケット
-
[解決済み] Chrome Developer Toolsでwebsocketトラフィックを検査する方法は?重複
-
[解決済み] WebSocket URIをページURIに相対的に構築する方法とは?
-
[解決済み] webhookとwebsocketの違い