Netzwerkprogrammierung - 1 Thread pro client?

  • Java

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

    Netzwerkprogrammierung - 1 Thread pro client?

    hi,

    ich beschäftige mich gerade mit Netzwerkprogrammierung.
    Und da habe ich ne Frage:
    Was sind die Vor-/Nachteile von: (alles Serverseitig)
    - Ein Thread für den Input, der alle Sockets der Clients nacheinander durchgeht (viel. auch per Threadpool immer ein paar gleichzeitig) und schaut, ob der Client etwas gesendet hat.
    und analog ein Thread für die Ausgabe an die Clients.

    oder

    -Ein Thread für jeden Client extra, der sich um alles für diesen Client kümmert.
    bei vielen Clients wären das natürlich viele Threads.Ist das ein Problem?

    Im Moment will ich ein Chat-Programm erstellen.
    Was ist da besser? Und warum?
    :P Mfg Aligator :P
    Du musst dir halt bewusst sein, dass Threads ordentlich Ressourcen fressen.
    Zudem nachst du den Server dadurch recht leicht angreifbar.
    Bedenke auch, dass die Threads dadurch verschwendet werden. Der Großteil der Zeit, wird wahrscheinlich gar keine Kommunikation statt finden. Dann wird ein großer Teil das Senden und Empfangen ausmachen. Tatsächliche Rechenleistung brauchst du da vrhältnismäßigkeit wenig.
    I/O basiert ist da am Besten.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    aligator schrieb:

    - Ein Thread für den Input, der alle Sockets der Clients nacheinander durchgeht (viel. auch per Threadpool immer ein paar gleichzeitig) und schaut, ob der Client etwas gesendet hat.
    Verwende die asynchronen Methoden für Senden/Empfangen.
    Um das Thread-Sharing kümmert sich dann der Threadpool selbst.
    @thefiloe
    so in etwa hatte ich es mir auch gedacht.
    Dann nehm ich also lieber den zweiten Weg.
    @ErfinderDesRades
    soweit ich es gelesen hab, sind bei Java die Input / Output streams gleichzeitig nutzbar. Sollte also kein Problem sein.

    Danke für eure Antworten :)
    :P Mfg Aligator :P