Socketserver erstellen, der mehrere Clients handlen kann



  • hallo leute,

    ich will einen socketserver (und später auch clients) erstellen, der mehrere clients gleichzeitig "bedienen" kann. mich würde jetzt vor allem interessieren ob ich eher threads oder eher select verwenden soll. welches davon ist schneller bei der ausführung? welches einfacher zu verstehen? welches sicherer (z.b. hängen gebliebener thread)? bei threads, wenn ich das richtig verstehe, müsste ich doch nach jedem accept einen neuen thread für den client, und in diesem thread wieder 2 neue, sowohl für read als auch für write erstellen (habe dann bei dem client getrennte eingabe/ausgabe felder, entweder GUI-app oder 2te konsole...). könnte mir das mal jemand schemenhaft darstellen und erklären...

    vielen dank für euere tips schonaml im voraus 🙂



  • dafür gibt es kein patentrezept. die einen schwören auf 'select', um die systemlast durch zusätzliche threads zu vermeiden (haben dafür das polling am hacken), die anderen benutzen threads, weil das handling einfacher ist. (ich gehöre zur zweiten fraktion). blocking sockets mit mehreren threads zu behandeln finde ich relativ einfach und praktisch.
    🙂



  • creating a new thread for each connection is only going to be useful for a relatively small number of connections
    🙂



  • async-freak schrieb:

    blocking sockets mit mehreren threads zu behandeln finde ich relativ einfach und praktisch.

    wie regelst du dann das blockende read/write? einen read und einen write thread aufmachen oder gibts da ne bessere lösung wie man das auch in einen thread packen kann?



  • Ich würde sagen, wenn du ein Server schreibst der Kommunikation mit mehren Clients sowie die Verbindungsversuche bearbeiten musst kommst du um THreads nicht herum oder Prozessen was du willst



  • Cefour schrieb:

    Ich würde sagen, wenn du ein Server schreibst der Kommunikation mit mehren Clients sowie die Verbindungsversuche bearbeiten musst kommst du um THreads nicht herum oder Prozessen was du willst

    ja also mit select könnte man schon auch den gewünschten effekt erzielen, aber ich habe mich jetzt auch für die threads entschieden. da würde mich aber interessieren wie viele ich brauche, wenn sowohl der server als auch der client parallel lesen und schreiben können sollen.



  • karlo k. schrieb:

    wie regelst du dann das blockende read/write? einen read und einen write thread aufmachen...

    kommt drauf an. wenns wirklich unabhängig sein soll, dann mit 2 threads pro verbindung. verbindungsabbrüche und ähnliche fehler sind ziemlich unkritisch, weil recv/send usw. dann auch ihren blocking-zustand verlassen. wenn man's richtig macht, braucht man nicht zu befürchten, dass threads hängen bleiben oder sowas.
    🙂


Anmelden zum Antworten