Je dois r�aliser un serveur qui pourrait avoir de tr�s nombreuses connexions ouvertes en permanence mais avec peu de traffic. (type messagerie instantan�e).
Le facteur limitant n'est apparemment pas le nombre de connexion TCP simultan�es que je peux maintenir �tablie, mais plut�t le nombre de threads.
On peut repousser cette limite � l'aide d'un thread pool, mais cela ne suffit pas car le traitement d'une requ�te peut impliquer l'attente de donn�es suppl�mentaires. Si le client distant ne transmet pas de donn�es, le thread est alors bloqu� et ne peut �tre affect� � une autre t�che.
Ceci provient du fait que l'appel au read/recv de donn�es suppl�mentaires se fait dans des appels de fonctions invoqu�es par le traitement de la t�che a effectuer. Il n'est alors pas possible d'interrompre le traitement pour le reprendre plus tard l� o� on l'a interrompu lorsque les nouvelles donn�es sont arriv�es.
Le serveur se trouve ainsi expos� � des attaques DOS o� les threads sont bloqu�s volontairement en attente de donn�es. Je pourrais mettre un timeout, mais une longue attente peut aussi �tre une situation normale. Je souhaiterais donc simplement que le thread ne soit pas bloqu� en attente de read.
Il semble apparemment que c'est la technique de coroutine qu'il me faudrait utiliser. J'ai trouv� le package suivant pour r�aliser cela. http://www.goron.de/~froese/coro/
Il y a aussi GNU Pth, mais je crains que l'utilisation dans une applicaton C++ demande une attention particuli�re. Quelle que soit la solution, cela risque d'�tre subtil a concevoir et � programmer.
Je voudrais donc savoir si ce probl�me a d�j� �t� r�solu et si oui comment.
Je voudrais aussi savoir dans quelle mesure le nombre de threads est un facteur limitant. Au fait quelle est la limite maximal du nombre de thread qu'on peut avoir sur un ordinateur linux 2.6 ?
Partager