Bonsoir!
Voilà, je suis en train d'écrire un morceau de code pour gérer la communication sur les sockets (si possible portable). Avant de l'entamer, je me suis pas mal renseigné sur les différents possibilitées (un thread par client, pool de thread...) et j'ai trouvé la solution de select() très intéressante.
Bien que l'ensemble soit fonctionnel, je me rend compte qu'il n'est absolument pas optimal. Je tiens à préciser que malgré les améliorations à apporter, je désirerai pouvoir gérer un maximum de clients tout en gardant un temps de réponse correct.
Voici mes questions:
-Quelle utilité de surveiller dans le select l'écriture de donnée puisque nous envoyons les données à un moment précis? ( send() )
-Actuellement, les données transmises sont censées peser 1024 octets au maximum. Cependant, j'aimerai pouvoir transmettre des messages plus volumineux sans mettre de côté les autres clients.
J'ai donc pensé une solution que je ne saurai pas mettre en place sans votre aide: Transmettre dès que l'on peut les 1024 premiers octets, puis au passage suivant transmettre encore 1024 et ainsi de suite jusqu'à ce que le message soit entièrement envoyé.
Il faudrait alors mettre en place un système de "queue" afin de pouvoir ajouter des données à envoyer par la suite (au cas où un message prenne un certain temps)
-De plus, je ne vois pas trop comment gérer la reception. Logiquement, on va devoir récupérer les données par tranche de 1024 tout comme on les a envoyé tout en stockant progressivement le message dans une variable temporaire avant de le traiter.
Mais dans ce cas, comment faire pour distinguer un message de 2048 octets, qui sera envoyé en deux parties, de deux messages de 1024 octets différents? J'aimerai de préfèrence ne pas avoir à ajouter des informations dans le message, si il est impossible autrement, que choisir? un caractère non-imprimable?
Voilà, si vous pouviez m'éclairer un peu, ca m'arrangerai!
J'accepterai de mettre le code source à disposition si vous me le demandez.
Merci bien!
Partager