J'écris un client HTTP en utilisant le .Net TcpClient/Sockets. Jusqu'ici, le client gère à la fois les réponses Content-Length et Chunked en itérant à travers la réponse NetworkStream (après avoir écrit une requête GET au TcpClient), en analysant les en-têtes et en récupérant les octets/octets du message. Pour ce faire, il utilise la méthode NetworkStream ReadByte..NET C# TcpClient/Socket Performance/efficacité du client HTTP
Tout cela fonctionne très bien, mais la performance est une considération clé de l'application et je voudrais la rendre aussi rapide et efficace que possible. Initialement, cela impliquera de remplacer ReadByte for Read pour le corps du message (basé sur Content-Length) ou la récupération de l'octet corps du message dans un tampon de taille appropriée, en utilisant ReadByte dans toutes les autres zones (telles que lire les en-têtes, tailles de blocs). etc).
Je suis curieux de connaître les meilleures façons de faire cela afin d'obtenir des performances optimales. Évidemment, le principal problème avec HTTP est de ne pas connaître la longueur du flux de réponse à moins qu'il ne soit analysé au fur et à mesure qu'il est récupéré.
Il ya des raisons spécifiques pour lesquelles je n'utilise pas plus de classes abstraites (par exemple HttpWebRequest) pour cela (j'ai besoin d'un meilleur contrôle au niveau de la socket).
Merci beaucoup,
Chris
BTW Je suis curieux - vous avez mentionné que vous avez besoin d'un contrôle fin sur le Socket/Connection, c'est pourquoi vous n'utilisez pas HttpWebRequest. pouvez-vous nous dire ces raisons? – feroze
Je veux simuler un nombre (disons 200) de clients web et pour cela je veux que chaque client fonctionne comme un thread qui gère sa propre connexion, en le gardant ouvert pendant un certain nombre de demandes différentes, en faisant une pause, etc. le client atteindra le même point final (fonctionnalité très similaire aux outils de test de charge standard). Je ne crois pas que HttpWebRequest puisse y parvenir car les connexions sont gérées via le point de service qui arrête ce niveau de contrôle granulaire? – Chris
Désolé, je devrais également dire que j'ai besoin de capturer des informations telles que le temps de premier octet, le nombre de reconnexion, etc ... – Chris