Bonjour
Je dois porter un code UNIX utilisant AF_Unix sous Windows, pour faire une communication "locale" (même ordinateur, ou ordinateur distant). Une utilisation classique de l'API est 20, 30, voire 50 clients.
La discussion que je désire démarrer est pour savoir si mes choix sont corrects, et si non, quels sont vos recommandations. Je n'ai pas énormément d'expérience concernant l'architecture client/serveur, mais j'ai quand même déjà écrit deux client / serveur utilisant les tubes nommés et la mémoire partagée. Maintenant, je désire connaître le meilleur design pour les besoin de l'API ci-dessus.
Voici mes questions et notes :
1) Choix du design de l'IPC
J'ai cherché sur internet (stackoverflow, ou [1]) et apparemment, ce qui semble le plus proche de AF_UNIX sous Windows sont les tubes nommés. Est-ce un bon choix ?
2) Modes I/O
Si les tubes nommés sont un choix correct, il y a plusieurs modes possibles :
a) Synchrones (bloquant ou non)
b) Overlapped asynchrone
c) les "Completion Routine"
Je pense que a) n'est pas le meilleurs.
Pour b) MSDN a une implémentation [2], mais il me semble qu'il y a un hic. Dans la description, il est indiqué : "Because the same event object is used for read, write, and connect operations for each instance, there is no way to know which operation's completion caused the event to be set to the signaled state for simultaneous operations using the same pipe instance." Ne pas savoir si on a un read ou un write me semble gênant.
Est-ce que c) est un bon choix ?
3) modèles de notification
Pour gérer les notifications, (client qui se connecte, message qui est reçu), il dépend du choix du mode pour l'I/O. Si c) est choisi, je pense qu'un des 2 modes suivant peut être utilisé :
a) WaitForMultipleObjectsEx
b) les I/O Completion Ports
J'ai lu sur stackoverflow ou [1] que les I/O Completion Ports sont conçus pour des client/serveur avec beaucoup de charge, avec plusieurs centaines voire milliers de clients (mes besoins sont de ~50 clients, peut-être un peu plus. De plus, il ajoute un peu d'overhead s'il y a peu de clients, et semble plutôt difficile à implémenter correctement.
Quels seraient vos conseils pour ce choix ?
J'arrête mes questions et attends vos conseils avant de commencer à écrire le code
merci
[1] http://tinyclouds.org/iocp-links.html
[2] https://msdn.microsoft.com/fr-fr/lib...(v=vs.85).aspx
Partager