J'utilise TcpListener
(Clase) exemple https://msdn.microsoft.com/es-es/library/system.net.sockets.tcplistener(v=vs.110).aspx afin de traiter les demandes TCP.Comment faire pour distribuer des demandes de TCP Listener
Mais il semble que dans le même temps ce TCP Listener
va accepter plusieurs demandes qui devraient être traitées plus tard dans un couple de Web Services
ensemble et le résultat doit être retourné au TCP client
.
Je pense faire ce qui suit:
obtenir un objet de flux pour la lecture et l'écriture
NetworkStream stream = client.GetStream();
et enregistrez-le dans la classe de conteneur spécial.Mettez cette classe à la classe auxiliaire spéciale
Queue
comme celle-ci C#: Triggering an Event when an object is added to a Queue.Lorsque
Queue
est modifié, l'événement implémenté par le feu est traité pour traiter l'élément de file d'attente suivant de manière asynchrone à l'aide deTask
.Dans un
Task
communiquer avecWeb Services
et envoyer la réponse àTCP Client
.
S'il vous plaît, laissez-moi savoir cette architecture est vitale et capable de résoudre les multiples demandes de TCP Listener
.
Et pourquoi les mettre en file d'attente? Ensuite, toutes les demandes suivantes attendront que toutes les précédentes soient terminées. – Evk
@Evk Eh bien ... Je ne suis pas sûr de la file d'attente et je pense que j'ai besoin d'un type de BUFFER pour garder 'NetworkStream stream = client.GetStream();' rapidement ... Pensez-vous qu'il suffit de créer 'Task' et garder toute la logique là-bas? –
Eh bien, cela dépend de la charge, je pense. Dans certains cas, je pense que la file d'attente est une bonne solution, surtout dans les cas où ce que vous faites avec chaque élément est lié au CPU (quelques calculs lourds). Mais ici, les choses sont liées à l'E/S (vous faites des requêtes web), vous devriez donc pouvoir gérer beaucoup d'entre elles sans file d'attente. Donc, si la charge sur ce service ne sera pas très élevée - je pense que oui, le traitement des choses en parallèle (avec des tâches régulières) devrait être bien. – Evk