web-dev-qa-db-fra.com

TCP Contre. Http Benchmark

Une application Web est installée sur IIS et je parle avec Service-Machine [remote] . Je ne sais pas s'il faut choisir TCP ou Http comme protocole principal.

plus de détails:

  1. j'aurai plus d'un service\endpoint
  2. certains d'entre eux seront à sens unique
  3. l'autre sera à double sens
  4. les pages Web fonctionneront en face des services
  5. nous parlons de site web à grande échelle

Je connais assez bien la différence, mais je cherche un bon point de repère, cela montre à quel point le TCP est plus rapide?

48
rabashani

HTTP est une couche construite au sommet de la couche TCP selon certaines normes de transmission de données. Donc, utiliser naturellement TCP, les sockets sera moins lourd que d'utiliser HTTP. Si la performance est la seule chose qui compte, alors TCP est la meilleure solution pour vous.

Vous voudrez peut-être envisager HTTP en raison de sa facilité d'utilisation et de sa simplicité, ce qui réduit finalement le temps de développement. Si vous faites quelque chose qui pourrait être directement consommé par un navigateur (via un appel AJAX), vous devez utiliser HTTP. Pour qu'un navigateur non moderne consomme directement TCP connexions sans HTTP, vous devez utiliser Flash ou Silverlight, ce qui est généralement le cas pour les contenus enrichis tels que la vidéo et/ou l'audio. Cependant, depuis 2013, de nombreux navigateurs modernes prennent en charge les API pour accéder aux ressources réseau, audio et vidéo directement via JavaScript. La seule chose à considérer est le taux d'utilisation des navigateurs Web modernes parmi vos utilisateurs; voir caniuse.com pour les dernières informations concernant la compatibilité du navigateur.

En ce qui concerne les points de repère, ceci est la seule chose que j'ai trouvée. Voir page 5, il contient le graphique de performance. Notez qu'il ne compare pas vraiment les pommes avec les pommes puisqu'il compare l'option de données TCP/binaire avec l'option de données HTTP/XML. Ce qui pose la question: quel type de données vos services sortent-ils? binaire (vidéo, audio, fichiers) ou texte (JSON, XML, HTML)?

En général, les systèmes orientés performances, comme ceux des secteurs militaire ou financier, utiliseront probablement des connexions simples TCP. Là où, en général, les entreprises axées sur le Web choisiront d’utiliser HTTP et d’utiliser IIS ou Apache pour héberger leurs services. 

70
Darwyn

La question pour laquelle vous avez vraiment besoin d'une réponse est "Est-ce que TCP ou HTTP sera plus rapide pour my application". La réponse est que cela dépend de la nature de votre application et de la manière dont vous utilisez TCP et/ou HTTP dans votre application. Un benchmark HTTP générique vs TCP ne répondra pas à votre question, car il est probable que le benchmark ne correspond pas à votre comportement d'application.

En théorie, une solution conçue/implémentée de manière optimale à l'aide de TCP sera plus rapide que celle utilisant HTTP. Mais cela peut aussi demander beaucoup plus de travail… en fonction des détails de votre application.

Il y a d'autres problèmes qui pourraient affecter votre choix. Par exemple, vous êtes moins susceptible de rencontrer des problèmes de pare-feu si vous utilisez HTTP que si vous utilisez TCP sur un port aléatoire. Une autre solution est que HTTP faciliterait la mise en œuvre d'un équilibreur de charge entre le serveur IIS et les systèmes principaux.

Enfin, à la fin de la journée, il est probablement plus important que votre système soit fiable, maintenable et (peut-être) évolutif qu’il est rapide. Une stratégie judicieuse consiste à implémenter la version simple en premier, mais vous avez des idées en tête pour accélérer les choses ... si la solution simple est trop lente.

31
Stephen C

Vous pouvez toujours le comparer.

En général, si ce que vous voulez accomplir peut être facilement réalisé via HTTP (c’est-à-dire que la seule raison pour laquelle vous auriez pensé autrement à utiliser raw TCP est pour une amélioration potentielle des performances), vous devriez probablement simplement utiliser HTTP. Bien sûr, vous pouvez faire de la programmation de socket, mais pourquoi se donner la peine? Beaucoup de personnes ont consacré beaucoup de temps et d'efforts à la construction de bibliothèques clientes et de serveurs HTTP, et ont passé plus de temps à optimiser et à tester ce code que vous ne pourrez jamais en passer sur vos sockets TCP. Il existe tout simplement tellement d'erreurs possibles que vous auriez à traiter, de cas Edge et d'optimisations possibles, qu'il est généralement plus simple et plus sûr d'utiliser une fonction de bibliothèque pour HTTP.

De plus, les spécifications HTTP définissent toutes sortes de fonctionnalités (et les clients/serveurs implémentés, que vous pouvez utiliser "gratuitement", c'est-à-dire sans aucun travail d'implémentation supplémentaire), ce qui facilite beaucoup l'interopérabilité avec des tiers. "Voici mon URL, voici les règles pour ce que vous envoyez, voici les règles pour ce que je retourne ..."

6
Adam Batkin

J'ai une application serveur C++ native auto-hébergée sur Windows que j'utilise comme code Casablanca C++ REST SD. Je peux utiliser n'importe quel client C #, JavaScript, C++, cURL, pratiquement tout ce qui peut envoyer un POST, GET, PUT, DEL message peut être utilisé pour envoyer des messages de demande à cette application Windows auto-hébergée. De plus, je peux utiliser une barre d’adresse de navigateur simple pour effectuer des requêtes GET en utilisant divers paramètres. Actuellement, je n’exécute ce système que sur un intranet privé, c’est donc très rapide - je ne l’ai pas comparé à un simple TCP, mais sur un intranet privé, je doute qu’il y ait une différence de quelques microsecondes? Pour la commodité et la facilité de développement et la possibilité de développer une application Internet complète, c'est un rêve devenu réalité. Il s’agit d’un système dédié avec un protocole privé utilisant de petits paquets JSON, vous ne savez donc pas si cela répond aux besoins de votre application? Une autre bonne chose est que le code C++ natif de l’application Windows pourrait être porté assez facilement pour être exécuté sur Linux/MacOS comme le Casablanca REST - le SDK est portable pour ces systèmes d’exploitation.

0
Neal Davis