Server multi client conception
Bonjour,
N'étant pas expert sur le développement d'application serveur à forte charge, je vous porte une réflexion autour du concept d'un serveur vers plusieurs milliers de clients.
A l'heure actuelle, j'ai un serveur pouvant accepter plusieurs clients.
J'ai choisi de n'utiliser qu'un seul thread pour gérer l'ensemble de mes clients connectés par le biais d'un liste chainée. Chaque nouvelle connexion crée un élément supplémentaire dans ma liste et chaque déconnexion en retire un.
Ensuite, j'utilise le couple select()/FD_ISSET() en parcourant ma liste chainée pour déterminer quel client envoi un message.
Ma réflexion :
Je vais avoir une montée en charge sur le nombre de clients, plusieurs milliers sur un seul serveur, à l'heure actuelle j'en ai une centaine max.
La solution déjà mise en place (une liste chainée dans un seul thread) n'ira pas, le temps pour parcourir la liste chainée avec un FD_ISSET() pour déterminer quel client envoi un msg n'est pas viable avec plusieurs milliers de clients.
J'envisage une solution utilisant une dizaine de threads dédiés aux sockets clientes.
Chaque thread gère alors une liste chainée de 1000 sockets max (1000x10 = 10000 clients max pour l'application).
Un nouveau thread gère la répartition des clients sur la 10aine de thread dédiées aux sockets clientes.
Cette architecture réponds à mon besoin, mais comment auriez-vous fait pour manager 10000 clients (ou plus) sur un seul serveur ?