[gull] serveur tcp et udp clients multiple

Daniel Cordey dc at mjt.ch
Wed Jan 7 09:22:07 CET 2009


On Tuesday 06 January 2009, Yann Sagon wrote:

> 
>                     -------------------------------
>             1x UDP  |                             | n x TCP
>              ====>  |                             | ===>
>                     | copie du message            | ===>
>                     |                             |...
>                     |                             | ===>
>                     -------------------------------

Pourrais-tu elaborer un poil plus ? je pige pas ce qui part avec 1 UDP et 
arrive en N TCP... Y-t-il un protocole d'application au-dessus de tout cela, 
qui te permette de recomposer le/les message dans l'ordre. J'ai pratique ce 
genre d'exercise en C (il y a deja fort longtemps), mais je ne connais pas les 
limitations de gestion des timings/semaphores et autres librairies en PHP. De 
plus, il n'est pas certain que les librairies PHP soient thread-safe. Or, ceci 
peut poser de gros probleme !

> Vu que c'est à destination d'une machine LAMP, j'ai premièrement
> commencé par le coder en php avec des fork pour prendre en compte les
> multiples clients tcp. Je communique entre les fork par des pair de
> socket. ça fonctionne mais c'est très bricolage.

C'est une solution qui en vaut une autre et ce n'est pas forcement une 
mauvaise solution. Tout depent des contraintes de performance, de 
fonctionalite et de souplesse.
 
> J'aimerais le re faire en QT pour qu'il soit éventuellement portable.

Pourquoi specialement Qt ? Ne serait-ce pas plus facile de developper une 
librairie et de definir un API non dependent d'une autre grosse librairie ?

> Il me semble que ce que je vais devoir faire c'est un thread par
> client tcp plus un thread pour le serveur udp. Ce dont je ne suis pas
> sûr c'est comment faire communiquer les threads entre eux. J'ai vu que
> qt propose différentes méthodes d'IPC. Ce qui me semble le plus adapté
> serait QsharedMemory, mais je n'ai pas vu comment l'intérroger
> autrement que en faisant du polling.

Haaaaaa les shared memory :-) Je ne connais pas l'implementation des shared 
memory de Qt, mais j'espere que cela utilise plutot les "memory maped files", 
sinon on risque de gros probleme de resilience dans les phases transitoires 
(cration/destruction de thread, persistance de l'information, etc.).

Je ne crois pas que les threads soient indispensables et on peut tres bien 
avoir un process d'envoi (UDP) avec N process independants, lances par 
inetd... La communication entre les process/threads peut effectivement se 
faire au travers de mmap files, mais il ne fautr pas oublier l'emploi de 
semaphores (ou un mechanisme equivalent). Je ne sais pas si PHP a des 
librairies mmap etc., mais j'ai un gros doute au niveau du 'thread-safe' avec 
PHP. 

Ces librairies existent en Python, mais certaines ne sont pas thread-safe... A 
mon avis, le seul moyen de developper quelque chose qui fonctionne bien (en 
etant meme plus performant) est de le developper en C/C++. La seulement, on 
sait si les libriaries sont thread-safe ou pas. Ignorer le probleme des 
thread-safe, lorsque l'on veut gerer des shm/mmap et des semaphores, revient a 
se tirer dans le pied avec deux pistolet tout en ayant la corde au cou :-)

dc




More information about the gull mailing list