Instances de canal nommé
Le serveur de canal le plus simple crée une seule instance d’un canal, se connecte à un client unique, communique avec le client, se déconnecte du client, ferme le handle de canal et se termine. Toutefois, il est plus courant pour un serveur de canal de communiquer avec plusieurs clients de canal. Un serveur de canaux peut utiliser une seule instance de canal pour se connecter à plusieurs clients de canal en se connectant et en se déconnectant de chaque client en séquence, mais les performances seraient médiocres. Le serveur de canaux doit créer plusieurs instances de canal pour gérer efficacement plusieurs clients simultanément.
Il existe trois stratégies de base pour traiter plusieurs instances de canal.
- Créez un thread distinct pour chaque instance du canal. Pour obtenir un exemple de serveur de canaux multithread, consultez serveur de canal multithread.
- Utilisez des opérations avec chevauchement en spécifiant une structure OVERLAPPED dans les fonctions ReadFile, WriteFileet ConnectNamedPipe . Pour obtenir un exemple, consultez serveur de canal nommé utilisant des e/s avec chevauchement.
- Utilisez des opérations avec chevauchement à l’aide des fonctions ReadFileEx et WriteFileEx , qui spécifient une routine de saisie semi-automatique à exécuter lorsque l’opération est terminée. Pour obtenir un exemple, consultez serveur de canaux nommés utilisant les routines de saisie semi-automatique.
Le serveur de canal multithread est plus facile à écrire, car le thread de chaque instance gère les communications pour un client de canal unique. Le système alloue le temps processeur à chaque thread en fonction des besoins. Toutefois, chaque thread utilise des ressources système, ce qui est un inconvénient pour un serveur de canal qui gère un grand nombre de clients.
Avec un serveur à thread unique, il est plus facile de coordonner les opérations qui affectent plusieurs clients, et il est plus facile de protéger les ressources partagées d’un accès simultané par plusieurs clients. Le défi d’un serveur à thread unique est qu’il nécessite la coordination des opérations avec chevauchement pour allouer du temps processeur pour gérer les besoins simultanés des clients.