Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.7.1 - Qt Creator : 4.2.0 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

Architecture multithread pour serveur grosse capacité.

Bonjour,

Rolisteam v1.8 est sort, il est temps que je commence à réfléchir à l avenir.
La prochaine grosse nouveauté sera d'implémenter un serveur apart.

J'ai déjà commencé à travailler dessus mais j'ai des doutes sur l'architecture à utiliser.

Je souhaite réaliser un serveur capable d accueillir plusieurs parties à la fois. Un peu à l image d'un serveur irc ou teamspeak par exemple. les joueurs peuvent changer de channel etc.
Des éléments partagés aux sein du channel seront peut-être stocké côté serveur pou réduire les échanges réseau en cas de nouvel arrivant par exemple.

Bref je cherche à réfléchir à une architecture qui permettrait d avoir beaucoup de channels possible et
D accueillir beaucoup de joueurs.

Quand je dis beaucoup, j'ai pas vraiment d idée. Il y a la valeur théorique et la probable.
Idéalement les valeurs théoriques serait le maximum de la capacité de la machine et pour la valeur probablement. Je dirais 250 joueurs, dans une 30aine de channel cela serait un bon gros serveur je pense.

Je dois aussi penser que le serveur sera héberger sur une machine ou d'autres services tournes: Web, teamspeak, irc....

Est-ce qui vaut mieux faire un thread d envoi un de réception, ou un thread par channel ?
Un pool ?

Je souhaite partir sur une bonne approche histoire de ne pas faire trois fois le boulot. Donc si connaissez des articles ou ouvrage, ou si vous avez déjà répondu à ce genre de problème, je prends.


Merci à vous

Réponses

  • Comme cela, je partirai sur un pool de threads dont le nombre pourrait évolué en fonction de la ram et du CPU utilisé…
  • Je suis parti sur un nombre de thread de reception/émission définissable par l'utilisateur => Les connexions sont réparties dans ses threads la de façon equitables. Les threads contiennent une classe qui gère les interactions avec les sockets.

    Quand un message est recu. Il est envoyé via un signal au parent des sockets manager. Qui le traite si c'est un message d'administration du server ou l'envoye à une classe channel (dans un model) qui le forward à tous les sockets présents dans le channel et on repasse par le thread reception/émission pour faire l'envoie proprement dit.



Connectez-vous ou Inscrivez-vous pour répondre.