Wieviel Clients kann man mit Select bedienen?
-
Ab und ist die select Methode nicht mehr effektiv? Oder kann ich damit auch 3000 Clients gleichzeitig bedienen? Oder nur 300?
Was für Alternativen gibt es?
Im Bereich Netzwerkprogrammierung war ich schon ein bißchen aktiv, aber ich weiß nicht ab wann select die falsche Wahl ist.
-
Hier sollte eine Antwort zu finden sein:
http://bulk.fefe.de/scalable-networking.pdf
Was hat diese Frage mit C++ zu tun?
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
das kommt immer drauf an, wie lange ein einzelner client
bedient werden muss.
allerdings gibt es eine begrenzung der max. ueberwachbaren
fds (wenn du pech hast sinds grademal 1024).
schau mal, obs fuer dein system fuer das du entwickelst auch poll
gibt.
-
entelechie schrieb:
das kommt immer drauf an, wie lange ein einzelner client
bedient werden muss.
allerdings gibt es eine begrenzung der max. ueberwachbaren
fds (wenn du pech hast sinds grademal 1024).
schau mal, obs fuer dein system fuer das du entwickelst auch poll
gibt.Die Clients solltens ich eigentlich andauernd melden. Ich vermute mal das es zwischen 0-10.000 Clients werden könnten.
Würde da denn nicht die select version + acceptSocket reichen? Aus dem PDF werde ich nicht ganz schlau, aber eigentlich sollte es doch gehen da select sich ja nur meldet wenn etwas empfangen wird.
Das einzige Problem könnte die Anzahl der maximalen Sockets sein, weiß jemand wie groß der Wert unter Windows bzw. Linux ist? Ich google gerade
-
So ich konnte per google nichts finden, allerdings konnte ich selber herausfinden das windows 2000 prof. ca. 3900 sockets verkraften kann.
Weiß jemand wie das bei den Ultima Online oder World of Warcraft Servern gehandelt wird? Jede WoW Welt hatte doch soweit ich mich erinnere auch ca 3000 Clients, wobei die das bestimmt mit Threads oder sowas machen weil select bei 3000 Leuten wäre ja ein wenig unfair für den der sich zuletzt verbunden hat.
hach ist das Thema spannend
-
howFar schrieb:
[..]
Weiß jemand wie das bei den Ultima Online oder World of Warcraft Servern gehandelt wird? Jede WoW Welt hatte doch soweit ich mich erinnere auch ca 3000 Clients, wobei die das bestimmt mit Threads oder sowas machen weil select bei 3000 Leuten wäre ja ein wenig unfair für den der sich zuletzt verbunden hat.
hach ist das Thema spannendGroße MMORPGS haben weit mehr als nur einen Rechner um die Clients zu verwaltet.
Stichwort: Distributed Server.
Da lässt du halt eine Welt von 20 verschiedenen Rechner berechnen, dann verteilt sich die Last sehr schön.
Jetzt stellt sich trotzdem die Frage wie 1000 oder mehr Clients von einem Rechner verwaltet werden können.
Vielleicht pro 100 User einen Thread zum verwalten starten? Das erscheint mir im moment am sinnigsten, ist aber auch nur eine Vermutung.
-
Yo, leider findet sich dazu nicht sooo viel im Netz. Ich hab mal unseren Netzwerkspezialisten gefragt, er hat mir erzählt das bei deren großen Projekten auch gerne UDP anstatt TCP genommen wird, wobei alle Telegramme eine Nummer im Header haben damit nichts verloren geht.
Falls noch irgendjemand ideen oder links zur Serverprogrammierung mit vielen Clients hat nur her damit
-
howFar schrieb:
Yo, leider findet sich dazu nicht sooo viel im Netz. Ich hab mal unseren Netzwerkspezialisten gefragt, er hat mir erzählt das bei deren großen Projekten auch gerne UDP anstatt TCP genommen wird, wobei alle Telegramme eine Nummer im Header haben damit nichts verloren geht.
Falls noch irgendjemand ideen oder links zur Serverprogrammierung mit vielen Clients hat nur her damit
Das stimmt nicht.
Distributed servering ist dein Stichwort.
Es haben z.b. einige Leute schon geschafft, Quake2 auf multiservering umzubauen. In dem Whitepaper wird erklaert wie.Auch gibt es einige Opensource MMORPGS oder P2P Programme die ja doch schon mit recht großen Usermengen zu kämpfenhaben.
Von der Projektgroesse wuerde ich es nicht abhaengig machen ob ich TCP oder UDP einsetze. Manchmal ist UDP einfach ungeeignet und TCP muss her, manchmal ist UDP besser und man kann auf die Übertragungssicherheit verzichten.
Forlaufende Nummern schreibt man bei UDP eigentlich immer in die Pakete, damit man immerhin ungefähr weiss wo man dran istIdeen zur Serverprogrammierung habe ich welche, aber sag mal worum es dir im genauerem geht? Ist Geschwindigkeit wichtig, oder große Robustheit aufgrund der eigenschaftern der Clients..
Viele Grüße
-
Das einzig Kriterium das ich habe wäre das der Server, auch wenn es halt nur ein PC ist, mit vielen vielen Clients zurechtkommt.
Die Clients werden die Verbindung wohl längere Zeit aufrecht erhalten, allerdings ist es auch absolut nicht schlimm wenn die Verbindung mal abreißt (nein, sie müssen trotzdem immer verbunden sein :D).Ich lege somit nur auf Geschwindigkeit wert
-
unter Windows ist IOCP das schnellste