Ich verwende TcpListener
(Clase) Beispiel https://msdn.microsoft.com/es-es/library/system.net.sockets.tcplistener(v=vs.110).aspx, um TCP-Anfragen zu verarbeiten.So verteilen Sie Anfragen vom TCP-Listener
Aber es scheint wie zur gleichen Zeit diese TCP Listener
wird mehrere Anfragen, die später in ein paar Web Services
zusammen verarbeitet werden soll akzeptieren und das Ergebnis muss an die TCP client
zurückgegeben werden.
Ich denke folgende zu tun:
ein Stream-Objekt zum Lesen und Schreiben von Get
NetworkStream stream = client.GetStream();
und in spezieller Container-Klasse speichern.Setzen Sie diese Klasse auf spezielle
Queue
Hilfsklasse wie diese C#: Triggering an Event when an object is added to a Queue.Wenn
Queue
geändert wird, wurde fire implementiert, um das nächste Warteschlangenelement asynchron mitTask
zu verarbeiten.Innerhalb eines
Task
mitWeb Services
, kommunizieren und die Antwort aufTCP Client
senden.
Bitte, lassen Sie mich wissen, diese Architektur ist wichtig, und in der Lage, die mehrere Anforderungen an TCP Listener
zu lösen.
Und warum in die Warteschlange? Dann werden alle nachfolgenden Anforderungen warten, bis alle vorherigen abgeschlossen sind. – Evk
@Evk Nun ... Ich bin mir nicht sicher über Queue und ich denke, dass ich irgendwie BUFFER brauche, um 'NetworkStream stream = client.GetStream();' schnell zu halten ... Glaubst du, ist genug, um 'Task' zu erstellen und alle Logik dort drüben? –
Nun, es hängt von der Last, denke ich. In einigen Fällen denke ich, dass die Warteschlange eine gute Lösung ist, besonders in Fällen, in denen das, was Sie mit jedem Element tun, CPU-gebunden ist (einige schwere Berechnungen). Aber hier sind Dinge IO gebunden (Sie machen Web-Anfragen), so dass Sie in der Lage sein, viele von ihnen ohne Warteschlange zu behandeln. Also, wenn die Belastung für diesen Service nicht sehr hoch sein wird - ich denke ja, die Verarbeitung von Daten parallel (mit regulären Aufgaben) sollte in Ordnung sein. – Evk