Questions sur la gestions des processus d'un serveur
Bonjour,
Je suis en train d'essayer de programmé la partie serveur d'un jeux et je me pose plusieurs questions sur le C dans le but de consommer un minimum de ressource tout en étant le plus rapide possible :
1) Pour vérifier qu'un serveur est en ligne, je peux établir une socket toutes les minutes pour chaque client (sans qu'ils se soient connectés), mais n'y a-t-il pas de méthodes moins coûteux?
2) Pour ce qui est des ports, faut-il associer un port par client? un port pour x client? (si oui comment choisir ce x?) ou un port pour tous les clients?
J'ai fait quelques recherches, et il semblerait que les n° de ports servent à définir l'application de destination du message pour éviter de "s'embrouiller" mais chaque client aura un processus dédiés au traitement de ses messages.
3) Pour la communications entre processus, on a les tubes et la mémoire partagée.
Les tubes sembles intéressant pour la discutions de processus 2 à 2 et la mémoire partagée pour la discutions entre un grand nombre de processus.
Mais quels sont les avantages et les défauts de chacun?
4) Pour les tubes, il me semble qu'on fait un fopen("nom", "w") et un fopen("nom", "r") pour le créer mais plus le tube sera utiliser plus il va "grossir", comment faire pour vider le début dont on a pas besoin?
(il faut aussi faire un fopen("nom", "r") après chaque modification il me semble non?)
5) Beaucoup de processus du serveur vont fonctionner par scrutation, c'est assez dommage...
J'ai dans l'idée de leur faire des sleep(x) s'ils se réveillent au bout de x secondes, ils font un "time out"
Et lors de la réception d'un message, un interruption réveille (SIGCONT) le processus concerné qui traitera le message et réveillera les autres processus impliqués. Est-ce une bonne idée?
J'essaye de faire des recherches internet, mais je n'arrive pas à trouver des explications plus approfondies qui me permettrais de trouver les réponses à mes questions.
Merci de m'avoir lu,
Neckara