Unterschiede zwischen TCP-Server-Implementierungen

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von J.Herbrich.

    Unterschiede zwischen TCP-Server-Implementierungen

    Hi,
    hier im Forum gibt es ja zwei populäre TCP-Server-Implementierungen. Einmal den Multiserver (TCP) von @kevin89, welcher für jeden Client einen einzelnen Thread erstellt und einmal den VersuchsChat mit leistungsfähigem Server von @ErfinderDesRades, welcher die asynchrone Read-Methode des Tcp-Clients verwendet.

    Ich habe mich sehr stark mit der Implementierung von dem Erfinder angefreundet und verwende diese nun überall, wo ein Tcp-Server vonnöten ist. Interessant wäre, ob diese auch Nachteile gegenüber dem Multiserver besitzt. (ein Vorteil ist ja schonmal, dass keine Millionen Threads benötigt werden)

    Ich würde mich über ein paar weitere Vor- und Nachteile beider Server/Clients freuen :)
    Mfg
    Vincent

    Tcp Server von ErfinderDesRades:
    Vorteile: Es können sehr viele Clienten bedient werden, da sie asynchron abgearbeitet werden
    "Nachteile": asynchronität (nur schlimm, falls es ein Spieleserver werden soll. Ein Egoshooter, indem die Koordinaten der Gegner bei jedem Spieler anderes sind wäre doch doof oder :) )

    Tcp-Server von kevin89
    Vorteile: 1)Einsteigerfreundlich, da leichter zu verstehen. 2) Mit bisschen Know-How kann man die Threads synchronisieren
    Nachteile: Ab einer gewissen Anzahl von Threads geht der Server in die Knie

    Im Endeffekt dreht es sich nur um die synchron/asynchronität. Falls ich irgendwo einen Denkfehler habe, dann korrigiert mich bitte ^^
    Den Nachteil der Asynchronität versteh Ich nicht,
    Threads laufen auch asynchron (also relativ zu anderen Threads).

    Bei der Methode von ErfinderDesRades ist halt der einzige Unterschied dass implizit ein Thread aus dem Threadpool benutzt wird (bei den Beginxy Methoden) wo man dann keinen expliziten Zugriff auf den Thread hat.

    Desweiteren ist Kevin89's Tutorial besser für Beginner geeignet da dass ganze ziemlich einfach gehalten ist, wohingegen ErfinderDesRades Tutorial mehr OOP und eben eine klare Strukturierung hat.

    Daher ist ErfinderDesRades Sample denk Ich auch einfacher weiterzuentwickeln weil eine klar erkennbare Architektur da ist (ist bei Kevin89's auch, aber eben sehr "linear" gehalten).
    Ebenso hat man auch bei ErinderDesRades Sample schon eine Grundlage für eine peer to peer Kommunikation, da man mit einer Anwendung sowohl Client als auch Server sein kann, was bei Kevin's Server nicht ohne weiteres geht.
    Was @Mojo da über Synchronität erzählt am besten ignorieren, denn das ist quatsch.

    Der Multiserver hat gar keine Vorteile. Mag zwar einfacher für Einsteiger sein, ist aber komplett falsch umgesetzt.
    Wer was lernen will, und vor allem auch was richtiges, schaut sich den Source von ErfinderDesRades an. Das nutzen der async Funktionen ist der richtige Weg und wird von den meisten auch verwendet.

    Gäbe da noch den Weg über die SocketAsyncEventArgs für maximale Optimierung, ist aber etwas komplizierter zu verwenden.
    Also ich benutze für die implementierung meines Wilhelmstift Netzwerks den Mtuliserver von Kevin, der Async Server scheint bei mir immer Probleme mit den Strings zu haben, und das GUI Invoke ist völlig umnötig in einer (richtigen) server umgebung wo der Server als Dienst laufen soll.

    Mich würde ja mal interessieren wie der Exchange Server oder andere Server Produkte von Microsoft im Hintergrund arbeiten. Da hier letzentlich eine große anzahl von Usern zugriff haben.

    Ich für meinen Teil habe das Protokoll so gestaltet das es DNS Round robin fähig ist und alle einstellungen und Daten liegen in Hintergrund auf ner DB. Wo hingegen die einstellungen auf einen Zentralen Server in Ram abgespeichert werden die zur laufzeit benötigt werden. und der hat ja eine überschaubare Anzahl an Connections.

    LG, J. Herbrich