Sockets, Simultane Verbindung --> for(;;) read(); ? Net wirklich, oder?



  • Hallo zusammen,
    ich frage mich wie den Applikationen programmiert werden welche mit X verschiedenen Clients verbunden sind. Steckt man jeden Client auf Server Seite in einen Thread und liest dann permanent á la for(;;) read() den Socket? Das scheint mir der absolute overkill zu sein.

    Soweit ich mich bisher schlaumachen konnte hat das Stichwort 'asynchron' in diesem Thema was zu melden, genaueres weiß ich bisher jeddoch nicht.

    P.S: Hat jemand vielleicht Erfahrung mit dem gleichzeitigen handlen von Bluetooth Verbindungen (BlueZ). Bzw. lassen sich die Verfahren von Ethernet & Co. darauf übertragen?

    Ich arbeite gerade an einer Software die Signale über Bluetooth abfängt und da ich jeden Client in einem eigenen Thread habe der eben permanent abläuft frage ich mich ob ich nicht etwas falsch mache. Besonders da ich mir nicht vorstellen kann dass für 2-3 clients ne moderne CPU ausreizen muss.



  • schau dir mal select() an.

    ansonsten, einfach synchron lesen - also blockend - wenn du eh pro client einen thread hast...



  • mit bluez kenn ich mich nicht aus. wenn es aber file descriptoren verwendet, kannst du auch epoll nützen. vielleicht schreibst du genauer, wie du in deinem programm die einzelnen clients unterscheidest, wenn es nicht per file descriptor passiert.

    select sollte man nur mehr bei betriebssystemunabhängigen programmierungen verwenden. bei linux sollte epoll und bei freebsd (und womöglich anderen bsd) kqueue verwendet werden. leider ist nur select überall verfügbar.



  • @besserwisser
    Ne, selbst beim plattform-unabhängigen Programmieren sollte man dann lieber auf libevent setzen, als auf select.


Anmelden zum Antworten