2017-05-01 6 views
0
  1. 通常、私はデータを取得/ポストするためにajax http要求を使用します。今、私は思考を持っていない理由は、私はすべてのajaxをsocketIOとの要求を置き換えてはいけないのですか?このアプローチに従うことには何らかの欠点がありますか?
  2. 私は、HTTPリクエストのたびにクライアントとサーバーの間でhttpヘッダーを介してセッションCookieが送信されることを理解しています。< =>サーバーとの対話でソケットを使用すると、ブラウザのセッションCookieが自動的にソケットヘッダーそれは存在する)?
  3. 私はHttpよりもSocketIOを好むべきですか?サーバはその一部のイベントについて、クライアントにいくつかのリアルタイムの情報をプッシュする必要があるとき(あなたは広範な答えを要求質問としてこれを考慮するならば、あなたはいくつかの関連記事に私をリンクすることができます)

答えて

1

WebSocketを、有用ですサーバー上で起こった。これにより、クライアントがサーバー上で何らかのイベントが発生したかどうかを確認するために、複数のポーリングAJAX呼び出しを行うことが回避されます。

シンプルなチャットアプリケーションを考えてみましょう。チャットセッションの他の参加者が何かを書いて、それを表示する必要があるかどうかをクライアントが知る必要がある場合、定期的にAJAXコールを行い、サーバ上でこれを確認する必要があります。一方、WebSocketは、これが発生したときにサーバがクライアントに通知することを可能にするので、ネットワークトラフィックに関してはるかに効率的です。また、WebSocketsプロトコルを使用すると、サーバーは同時に複数のサブスクライブされたクライアントにリアルタイム情報をプッシュできます。たとえば、WebSocketに登録されたWebブラウザとモバイルアプリケーションを使用し、サーバーを介して直接通信することができます。このようなシナリオをAJAXを使って実現するのは難しく、さらに多くのステートレスHTTPコールが必要になります。

私はそのセッションクッキーは、すべてのHTTPリクエスト中にクライアントとサーバー間で送信されます理解は、WebSocketをプロトコルが異なるソケット

を使用してクライアント< =>サーバーの相互作用の中に同じこの場合でありますHTTPプロトコル。初期のハンドシェイクが起こった後(HTTP経由で行われる)、クッキーのようなHTTP特有のものはこれ以上存在しません。

WebSocketを使用する際に注意すべき点が1つあります。クライアントとサーバーの間に永続的な接続を確立する必要があります。これにより、サーバーの負荷を分散する必要がある場合には、この処理が難しくなる可能性があります。もちろん、WebSocketsプロトコルのさまざまな実装がこの問題の解決策を提供するかもしれません。例えば、Socket.IO has a Redisの実装では、サーバがノードのクラスタを介して接続されたクライアントを追跡することができます。