Multithread NamePipeServer en C#
Hi
Je veux utiliser NamedPipeServerStream qui est nouveau à partir .NET 3.5 pour namedpipe de la communication.
Je veux écrire multi-thread serveur de canal. est-il géré par défaut ou, devrais-je écrire du code pour cela. mon tuyau serveur doit gérer plusieurs demande, au moment
toute solution ou un code ?
Quel est le nombre maximal de demande d'un client à un nom de serveur de canal ?
Il n'y a pas de limite au nombre de lectures et d'écritures d'un client peut faire à un canal nommé aussi longtemps que les deux extrémités du tuyau sont ouverts.
Il n'y a pas de limite au nombre de lectures et d'écritures d'un client peut faire à un canal nommé aussi longtemps que les deux extrémités du tuyau sont ouverts.
OriginalL'auteur Ehsan | 2010-12-31
Vous devez vous connecter pour publier un commentaire.
Chaque NamedPipeServerStream instance est un Flux de mise en œuvre de la recouvrant d'une poignée à une instance d'un canal nommé. Vous pouvez (et un multithread pipe serveur) plusieurs instances de NamedPipeServerStream pour le même canal nommé: chacun enroule une poignée pour une instance différente de la pipe nommé, à l'entretien d'un client différent. Canal nommé instances (même pour le même tube) sont séparés par le système d'exploitation, il n'est pas nécessaire pour toute explicite de codage de garder chaque client de communication avec le serveur distinct.
Ce que vous avez besoin de code explicitement est le modèle de thread pour le serveur. L'approche la plus simple pour le multithreading, le serveur est expliqué dans cette SORTE de réponse, qui comprend un code pseudo-modèle. Plus évolutif implémentations, si un grand nombre de connexions simultanées appelants doivent être pris en charge, l'utilisation de la thread de mise en commun et les méthodes asynchrones au lieu de créer un thread dédié pour chaque connexion.
Oui, c'est vrai
OriginalL'auteur Chris Dickson
Vous pouvez écrire un multi tube fileté serveur à plusieurs reprises par la création d'un NamedPipeServerStream et d'attente pour une connexion, puis de fraie un thread pour cette instance de NamedPipeServerStream.
Vous ne pouvez avoir qu'254 clients en même temps bien que, selon l' .NET la documentation MSDN lien ci-dessous. Pour l'Api Win32, bien que vous pouvez passer une valeur spéciale pour obtenir illimité basée sur les ressources système. Il semble que la documentation MSDN est mal, comme indiqué ci-dessous.
Le code ci-dessous n'est pas testé, donc s'il vous plaît ne pas simplement copier et coller pour une utilisation en production sans test:
the number of pipe instances that can be created is limited only by the availability of system resources
.ArgumentOutOfRangeException
est levée lors de l' `maxNumberofServerInstances est inférieur ou supérieur à 254. msdn.microsoft.com/en-us/library/bb355105.aspxLa documentation pour la NamedPipeServerStream ctor mensonges. La valeur
-1
, correspondant àPIPE_UNLIMITED_INSTANCES
, est également une valeur acceptable.if (((maxNumberOfServerInstances < 1) || (maxNumberOfServerInstances > 0xfe)) && (maxNumberOfServerInstances != -1)) { throw new ArgumentOutOfRangeException("maxNumberOfServerInstances", SR.GetString("ArgumentOutOfRange_MaxNumServerInstances")); }
Pourriez-vous fournir une autre référence qui contredit cette documentation que j'ai cités comme vous l'avez mentionné?
Je vois ici: msdn.microsoft.com/en-us/library/aa365150(v=vs. 85).aspx il parle d'illimité basée sur les ressources système, mais je me demande si la .NET de la mise en œuvre est différente?
OriginalL'auteur Brian R. Bondy
NamedPipeServerStream est une connexion point à point. Vous devez synchroniser les appels vous-même - par exemple les appels écrit à une file d'attente et que votre serveur lit le synchronisée de la file d'attente et effectue les appels.
OriginalL'auteur Aliostad