Bitte nochmal: Multithreaded Server



  • Hallo,

    ich weiss das das thema hier schon bis zu erbr*** behandelt wurde. Aber ich benötige doch noch mal ne kleine Einführung.

    Wenn ich per Socket (CAsynSocket) mehere Clients am Server annehmen will, wie kann man das am besten lösen? Die Schachen die ich bisher gefunden habe sind:

    1. NDK 2.0, super sache, würds aber gern alleine können. Scheint auch etwas umständlich zu impolementieren sein, oder?
    2. Mit CList / CArray die Nutzer verwalten. Dabei ist hinzufügen ja kein Problem, aber woher weiss ich welche Station welche Position in der dynamischen Liste hat? Da müsste man ja immer den Namen der Station / IP Adresse "mitschleppen" oder? Man kann sonst nicht eine bestimmte Station aus der Liste löschen.
    3. Richtig ordentlich mit CSocket und für jede Connection einen Thread starten?
    4. Einfach 1000 mal eine Instanz von CASyncSocket anlegen... (war nur spass).

    Das von mir, damit keiner auf die Suchfunktion oder Faulheit verweist.
    Ich wäre für Quellcode sehr dankbar.

    MfG Torsten



  • zu 1.)
    war mir auch zu umständlich 🙄

    also bin ich zu 2.) umgestiegen

    zu 2.)
    Du kannst mit der Funktion GetPeerName(...) herausfinden von wem die Nachricht kommt -> denjenigen suchst du einfach im Array.
    Am besten nimmst du ein CObArray.

    Bestimmte User löschen kannst du dann einfach indem du über den Namen die Position im Array feststellst und dann m_oaUserList.RemoveAt(nPos) aufrufst.
    (m_oaUserList -> CObArray)

    zu 3.) Leider kA davon.

    zu 4.) Lass das lieber 😉

    🙂



  • Du musst nur das Socketobjekt in einer Liste speichern.
    Bei jedem Connect erstellst du einen neuen Socket der natürlich auch mit einer von CAsyncSocket abgeleitetetn Klasse berbunden ist.

    Sollte jetzt eine Message reinkommen wird von der AsyncSocketklasse eine Nachricht mit dem Socketobject an den Dialog gesendet. Dies abfangen und in der Soeicherklasse den Socket suchen. Somit hast du wieder die Daten des Clienten.
    Also ist eigentlich 4 fast genau richtig. Ein Server mit 1000 Clienten läuft sowieso nicht auf einem Pentium celeron 300 mit 128 MB


Anmelden zum Antworten