non-blocking TCP Server
-
Guten Tag,
ich bin grade dabei einen non-blocking TCP Server zu schreiben bzw versuche es :).
Meine Problemstellung ist nun folgende, ich habe mich für Select entschieden und lese nun das man Select ab einer FD_SET-Größe von 63 Sockets nicht mehr vertrauen kann und die einzige möglichkeit Select sicher zu verwenden multithreading wäre... Theorie einfach, wir erstellen ab einer größe von 62 einen neuen thread mit einer eigenen select abfrage. Das Problem ist nun die Praxis :(.
Ich nun leider keine Idee wie man Multithreading unter windows umsetzen kann.Hat irgendjemand eine Ahnung wie man das machen könnte mit select und multithreading oder hat jemand einen komplet neuen Vorschlag, wie ich an einen TCP Server rangehen kann, der möglichst viele Connections auf einmal behandeln kann...
Danke schonmal im Vorraus,
Niels
-
you can do #define FD_SETSIZE 512 (or some larger number if you wish)
-
Must FD_SETSIZE be an Exponent of 2 or could i just define it however i want to?
-
Nein, muss kein Exponent von zwei sein.
Wenn es wirklich um Perfomance geht kommt ihr aber um Threads wohl eh nicht rum..Vielleicht hilft ja schon:
http://msdn.microsoft.com/en-us/library/ms682453(VS.85).aspx
-
Hallo,
ich habe so ziemlich das gleiche Problem...
Hat irgenjemand ein Beispielcode für das einen Server der mit Select arbeitet?
alles was ich bis jetzt gefunden habe hat mich nicht wirklich weitergebracht -.-
kann mir überhaupt jemand sagen, wie ich einen Server effizient anbieten kann?
-
Man könnte
selectmehrmals hintereinander aufrufen, um beliebig viele Sockets zu bedienen.
-
hat da jemand ein Beispiel zu?
(ein code sagt mehr als tausend worte :))
-
Memorias schrieb:
hat da jemand ein Beispiel zu?
(ein code sagt mehr als tausend worte :))Google gibt ca. 99999 Beispiele

-
Sonst gibt's auch noch I/O Completion Ports, was afaik DIE Herangehensweise für Asych-Network unter Windows ist.
-
Soweit ich weiß ist I/O nicht das beste, weil es für jede neue Connection einen neuen thread erzeugt.. und das ist in den meisten Fällen untragbar.
-
Thread-Pool um das zu beantworten...
Wie genau das funktionier hab ich aber auch kA
-
jemand ne Ahnung wie das mit Thread-Pools läuft?
-
Du erstellst einfach n Threads und legst die schlafen. Sobald was in der Completion Queue landet, erwacht ein Workerthread und arbeitet den Request ab, bevor er wieder schlafen geht.