3

背景: NodeJS+Expressを使用してWebアプリを構築しています。クライアントとサーバー間の通信のほとんどは、REST(GETおよびPOST)呼び出しです。私は通常、 https: //developers.google.com/appengine/articles/rpcで説明されているようなAJAXXMLHttpRequestを使用します。また、RESTfulサービスをSocket.ioでも使用できるようにする方法がわからないようです。

私の質問は

  • AJAX RPC上でSocket.ioを使用する必要があるシナリオは何ですか?
  • それらを一緒に機能させる簡単な方法はありますか?少なくともExpressjsスタイルのRESTの場合。
  • 非リアルタイムWebアプリケーションでsocket.io(WebSocketが使用されている場合-TCPレイヤー)を使用することの本当の利点はありますか?tinyurlサイトのように(ユーザーがクエリを投稿し、サーバーが応答して忘れる)。

また、私はトリッキーだがナンセンスなアイデアを考えていました。クライアントからのリクエストにRESTfulを使用し、サーバー側からの接続を閉じて実行するとどうなりますかsocket.emit()

前もって感謝します。

4

2 に答える 2

4

主な問題は、WebSocketがHTTPのように要求/応答指向ではないことです。RESTとHTTPについては同じ意味で言及していますが、RESTはHTTPルートの設計とモデリングの背後にある方法論であることに注意してください。

あなたの質問、1。Socket.ioは、要求/応答形式を必要としない場合に適したシナリオです。たとえば、より多くのボタンをクリックできる人が勝つマルチプレイヤーゲームを構築している場合、クリックごとに登録したサーバーからの応答を必要とせずに、各ユーザーからクリックごとにサーバーを送信します。WebSocket接続が開いている限り、メッセージがサーバーに到達していると見なすことができます。もう1つの使用例は、サーバーが散発的にクライアントに接続する必要がある場合です。分析ページは、データがクライアントにいつ存在する必要があるかについて統一されたパターンがないため、WebSocketの優れたユースケースになります。これはいつでも発生する可能性があります。

  1. WebSocket接続は、サーバーにWebSocket接続を要求する特別なヘッダーを持つHTTPGET要求upgradeです。WebSocket接続でさまざまなイベントとメッセージを区別するのはアプリケーションロジック次第であり、RESTスタイルのURIとメソッドと一致しない可能性があります(そうでない場合は、ある意味でレプリケーションHTTP要求/応答です)。

  2. いいえ。

最後のビットで何を意味するのかわからない。

于 2013-02-05T01:11:36.117 に答える
1

Socket.IOを使用する場合について詳しく説明し、Tjに詳細な説明を残します。

一般に、パフォーマンスや遅延が主な懸念事項であり、ユーザーがデータを頻繁にポーリングするサイトがある場合は、Socket.IOを選択します。AJAXまたはロングポーリングは、実装がはるかに簡単ですが、高負荷の状況では深刻なパフォーマンスの問題が発生する可能性があります。高負荷とは、Facebookのような意味です。何百万人もの人々がフィードを読み込んでいて、毎分各ユーザーがサーバーに新しいデータを要求していると想像してみてください。それをうまく機能させるには、いくつかの深刻なハードウェアとソフトウェアが必要になる可能性があります。Socket.IOを使用すると、代わりに各ユーザーが接続し、サーバーからの新しいデータが到着するのを無期限に待つことができるため、サーバー全体のトラフィックが大幅に減少します。

また、リアルタイムアプリケーションを使用している場合、Socket.IOを使用すると、適切なサーバー負荷を維持しながら、はるかに優れたユーザーエクスペリエンスを実現できます。一般的な例はチャットルームです。サーバーを常にポーリングして新しいメッセージを探す必要はありません。サーバーが受信した新しいメッセージをブロードキャストする方がはるかに優れています。長いポーリングでそれを行うことはできますが、サーバーリソースの点でかなり高価になる可能性があります。

于 2013-02-05T03:21:58.370 に答える