Threads können gut funktionieren, skalieren aber selten gut zu vielen Clients. Es gibt zwei einfache Wege und viele komplexere Wege, das zu handhaben, hier ist ein Pseudocode, wie die leichteren zwei normalerweise strukturiert sind, um Ihnen einen Überblick zu geben.
select()
Dies ist ein Aufruf zu überprüfen, an denen, die Steckdosen haben neue Kunden oder Daten warten, ein typisches Programm sieht dies so etwas wie.
server = socket(), bind(), listen()
while(run)
status = select(server)
if has new client
newclient = server.accept()
handle add client
if has new data
read and handle data
Was bedeutet, werden keine Threads benötigt, mehrere Clients zu handhaben, aber es ist nicht wirklich gut skaliert, wenn entweder Griff Daten eine lange Zeit in Anspruch nehmen, dann werden Sie keine neuen Daten lesen oder neue Kunden akzeptieren, bis das erledigt ist .
Async Steckdosen
Dies ist ein weiterer Weg, Steckdosen der Handhabung, die Art von oben wählen Sie abstrahiert wird. Sie richten nur Callbacks für häufige Ereignisse ein und lassen das Framework das nicht so schwere Heben durchführen.
function handleNewClient() { do stuff and then beginReceive(handleNewData) }
function handleNewData() { do stuff and then beginReceive(handleNewData) }
server = create, bind, listen etc
server.beginAddNewClientHandler(handleNewClient)
server.start()
Ich denke, dass sollte besser skalieren, wenn Ihre Datenverarbeitung eine lange Zeit braucht. Welche Art von Datenverarbeitung werden Sie durchführen?
Versuchen Sie http://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod ... es gibt eine Million Artikel um dort, wenn Sie nach 'async Socket C#' suchen .. – atlaste
Es gibt Hunderte von Beispielen, wenn Sie googlen "Einführung in Socket-Programmierung C#". Auch viele tolle You-Tube-Videos zum Thema, wenn Sie das bevorzugen. – MarcF