Si vous souhaitez obtenir les meilleures performances possibles, vous devez utiliser des sockets en mode non bloquant ou en utilisant completion ports. IPWorks est implémenté comme cela, ainsi que iocp. Autant que je sache, Indy ou Synapse ne les implémente pas (au moins officiellement).
Nous avons utilisé des ports d'achèvement et un pool de threads dans notre unité open source SynCrtSock, utilisée dans notre Synopse SQLite3 framework.
Voici quelques références de cette solution, allant de Delphi 6 à Delphi XE. Je ne dis pas cela est le « meilleur élément », mais c'est un travail et un rapide (chaque demande est d'environ 4 Ko de données JSON):
- client Http garder en vie (par exemple une connexion HTTP/1.1 client maintenu en vie pendant les requêtes): premier en 7.87ms, fait en 153.37ms soit 6520/s, en moyenne 153us
- Http client multi-connexion (ie une nouvelle connexion client HTTP/1.0 créée pour chaque requête - celle-ci utilise des ports d'achèvement et un pool de threads): d'abord en 151us, en fait 305.98ms ie 3268/s, moyenne 305us
Pour une vitesse compa Rison, voici les autres protocoles de communication dans notre cadre:
- accès au tuyau nommé: d'abord en 78.67ms, fait en 187.15ms-à-dire 5343/s, moyenne 187us
- messages de fenêtre locale: premier à 148us , fait en 112.90ms-à-dire 8857/s, moyenne 112us
- directe dans l'accès aux processus: premier à 44us, en fait 41.69ms-à-dire 23981/s, moyenne 41us
Nous utilisons le protocole HTTP/1.1 sur TCP/IP, parce que je C'est très peu de surcharge sur TCP/IP, et c'est un protocole bien géré pour les firewalls et autres, et permet à notre framework d'être utilisé par une application AJAX, alors que son but principal est de servir les clients Delphi.À mon humble avis, il n'y a pas de «meilleur composant alternatif de socket serveur pour Delphi», cela dépend quel est le but de votre application serveur. Le goulot d'étranglement principal sera dans le noyau Windows lui-même. Peut-être un accès direct à la HTTP Kernel-Mode Driver (Http.sys) de Windows pourrait aider. Envisagez d'utiliser un serveur optimisé dédié au lieu d'un serveur Delphi, comme lighttpd ou Cherokee en utilisant FastCGI pour gérer les demandes via une application Free Pascal (ou CrossKylix), sous Linux. Je suppose que ce sera la meilleure performance possible.
Eh bien, je m'attendais vraiment à plus d'alternatives. J'accepte cette réponse pour m'avoir indiqué iocp. Merci beaucoup! –
J'ai ajouté le support http.sys pour notre serveur HTTP/1.1. C'est un support très rapide au niveau du noyau du serveur HTTP. Voir http://blog.synopse.info/post/2011/03/11/HTTP-server-using-fast-http.sys-kernel-mode-server –