web-dev-qa-db-ja.com

TCP Vs. Http Benchmark

IIS上にWebアプリケーションがあり、[remote] Service-Machineと通信しています。メインプロトコルとしてTCPまたはHttpを選択するかどうかはわかりません。

詳細:

  1. 複数のサービス\エンドポイントがあります
  2. それらのいくつかは一方向になります
  3. もう一方は双方向になります
  4. webページはサービスの前で動作します
  5. 私たちは大規模なウェブサイトについて話している

私はその違いをかなりよく知っていますが、TCPがどれほど高速であるかを示す良いベンチマークを探していますか?

49
rabashani

HTTPはTCPレイヤーの上に構築されたレイヤーで、データ送信を標準化するものです。したがって、当然TCPソケットを使用する方がHTTPを使用するよりも軽くなります。パフォーマンスだけが重要な場合は、プレーンTCPが最適なソリューションです。

HTTPの使いやすさと、最終的に開発時間を短縮するため、HTTPを検討することをお勧めします。 (AJAX呼び出しを介して)ブラウザーによって直接消費される可能性のある処理を実行している場合は、HTTPを使用する必要があります。非最新のブラウザがHTTPなしでTCP接続を直接使用するには、FlashまたはSilverlightを使用する必要があります。これは通常、ビデオやオーディオなどのリッチコンテンツで発生します。ただし、現在(2013年現在)多くの最新のブラウザーは、JavaScriptを介してネットワーク、オーディオ、およびビデオのリソースに直接アクセスするためのAPIをサポートしています。考慮すべき唯一のことは、ユーザー間の最新のWebブラウザーの使用率です。ブラウザの互換性に関する最新情報については、 caniuse.com を参照してください。

ベンチマークについては、 this が唯一見つかった。 5ページを参照してください。パフォーマンスグラフがあります。 TCP/BinaryデータオプションとHTTP/XMLデータオプションを比較するため、実際にリンゴとリンゴを比較するわけではないことに注意してください。質問をするのはどれですか:サービスはどのようなデータを出力していますか?バイナリ(ビデオ、オーディオ、ファイル)またはテキスト(JSON、XML、HTML)

一般的に、軍事または金融セクターのシステムのようなパフォーマンス指向のシステムは、おそらく単純なTCP接続を使用します。一般的なウェブ中心の企業がHTTPの使用を選択し、IISまたはApacheを使用してサービスをホストする場合。

71
Darwyn

本当に答えが必要な質問は、「TCPまたはmyアプリケーションの場合はHTTPの方が高速です」です。答えは、アプリケーションの性質に依存するということです。また、アプリケーションでTCPおよび/またはHTTPを使用する方法。一般的なHTTP対TCPベンチマークはあなたの質問に答えません。ベンチマークがアプリケーションの動作と一致しないということです。

理論的には、TCPを使用して最適に設計/実装されたソリューションは、HTTPを使用するソリューションよりも高速になります。しかし、アプリケーションの詳細によっては、実装するのにかなり手間がかかる場合もあります。

選択に影響する可能性のある他の問題があります。たとえば、HTTPを使用する場合は、ランダムポートでTCPを使用する場合よりもファイアウォールの問題が発生する可能性が低くなります。HTTPを使用すると、 IISサーバーおよびバックエンドシステム。

最後に、1日の終わりには、システムが高速であるよりも、安全で、信頼性が高く、保守可能で、(おそらく)スケーラブルであることがおそらく重要です。賢明な戦略は、最初に単純なバージョンを実装することですが、単純なソリューションが遅すぎる場合は、それをより速くする方法について頭の中に計画があります。

33
Stephen C

いつでもベンチマークできます。

一般に、達成したいことをHTTPで簡単に行える場合(つまり、raw TCPを使用するとパフォーマンスが向上する可能性がある場合)を考える唯一の理由は、おそらくHTTP確かに、ソケットプログラミングを行うことはできますが、なぜ面倒なのでしょうか?多くの人がHTTPクライアントライブラリとサーバーの構築に多くの時間と労力を費やし、コードの最適化とテストに時間を費やしています。おそらくあなたのTCPソケット。あなたが処理しなければならない可能性のある非常に多くの可能性のあるエラー、エッジケース、実行できる最適化があるので、通常はより簡単で安全ですHTTPのライブラリ関数。

さらに、HTTP仕様では、あらゆる種類の機能(および「無料」で使用できるクライアント/サーバー実装、つまり追加の実装作業が不要)が定義されているため、サードパーティの相互運用性がはるかに容易になります。 「ここに私のURL、ここにあなたが送るもののルール、ここに私が返すもののルールがあります...」

6
Adam Batkin

Casablanca C++ REST SDKコードを使用するセルフホストWindowsネイティブC++サーバーアプリケーションがあります。任意のクライアントC#、JavaScript、C++、cURL、基本的にPOSTを送信できるものはすべて使用できます。 、GET、PUT、DELメッセージを使用して、このセルフホストのWindowsアプリにリクエストメッセージを送信できますまた、プレーンブラウザのアドレスバーを使用して、さまざまなパラメーターを使用してGET関連のリクエストを実行できます。それは非常に高速です-生のTCPを実行するだけでベンチマークしていませんが、プライベートイントラネットでは数マイクロ秒の違いさえあると思いますか?開発の利便性と容易さのために、完全なインターネットアプリに拡張するためにそれは小さなJSONパケットを使用するプライベートプロトコルを備えた専用システムであるため、アプリケーションのニーズに合うかどうかは定かではありません?もう1つの素晴らしい点は、このWindowsアプリケーションのネイティブC++コードをLinux /カサブランカとしてのMacOS REST = SDKはそれらのOSに移植可能です。

0
Neal Davis