maitretarot-devel-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Maitretarot-devel-fr] sockets, serveurs, fork, POSIX...


From: Yves Mettier
Subject: Re: [Maitretarot-devel-fr] sockets, serveurs, fork, POSIX...
Date: Mon, 3 Feb 2003 19:30:16 +0100 (CET)

> On Mon, Feb 03, 2003 at 04:34:31PM +0100, Yves Mettier wrote:
>> J'ai un petit probleme technique pour realiser ce que je voudrais faire sur 
>> le
>> serveur maitretarot.
>> L'idee est d'avoir un serveur (au sens large du terme) capable de gerer 
>> plusieurs
>> parties (qui se jouent en meme temps, les parties). Et d'avoir un process par
>> partie. Pour realiser cela, mon idee est que chaque client se connecte a un 
>> process,
>> le pere, decline son identite et ses intentions (le nick et ensuite
>> creer|participer|regarder une partie).
>>
>> Le probleme consiste donc, une fois que le serveur sait les intentions du 
>> client, a
>> "transferer" la socket a un process fils. Lorsqu'il s'agit de creer la 
>> partie, donc
>> de transferer la socket lors du fork, je sais faire.
>> Mais comment fait-on pour transferer une socket d'un process a un autre, 
>> quand
>> l'autre existe deja?
>>
>> Ceci est un probleme independant du langage de programmation utilise, et si
>> quelqu'un connait une solution, ce serait cool qu'elle soit independante du 
>> langage
>> aussi :)
>>
>> Si personne n'a de solution, et si je ne trouve pas, j'ai eventuellement une
>> solution de remplacement, un peu plus lourde, qui consiste a forker une fois 
>> que
>> tout le monde est connecte. Cela empeche des spectateurs de venir rejoindre 
>> une
>> partie une fois que le fork a ete fait. Enfin on peut le faire mais c'est 
>> lourd.
>
> Salut,
>
> Une solution (mais pas portable du tout) serait de faire un appel
> clone() au lieu du fork() avec CLONE_FILES (voire la man) et de
> communiquer entre processus par un pipe pour indiquer les fd des
> nouvelles connexions pour tel ou tel process.

Autant faire des threads, qui font aussi appel a clone sur GNU/Linux :)
J'espere que je ne vais pas en venir la, etant donne que les process sont quand 
meme
independants une fois que tout le monde est la. Mais bon, si y'a rien de mieux?

>
> Ceci dit, une solution plus clean (amha...) pourrait etre de gerer plusieur 
> partie
> dans un seul processus, genre avec une liste de
> structures "partie" independantes, le tout tournant autour d'un select() qui
> ecouterait tous les sockets kifo.

C'est ce que je vais faire pour gerer chaque joueur d'une partie. Mais pour 
l'ensemble,
en cas de trop grand nombre de partie, est-ce que ca va pas ralentir tout le 
monde?

Yves
-- 
- Homepage - http://ymettier.free.fr - http://www.cmg.com -
- GPG key  - http://ymettier.free.fr/gpg.txt              -
- MyAM     - http://www.freesoftware.fsf.org/myam         -
- GTKtalog - http://www.freesoftware.fsf.org/gtktalog     -








reply via email to

[Prev in Thread] Current Thread [Next in Thread]