GameServer - mehrere clients
-
Ich hab mich durch das Tutorial von c-worker.ch über Windows Socketprogrammierung durchgearbeitet und schreibe gerade meine Server Klasse.
Nun stellt sich die die Frage, ob ich "select()" oder "nicht blokierende sockets" benutzen soll.
Es sollen ja schließlich mehrere Clients bedient werden.Aber der Server muss auch noch einige NPCs zentral berechnen, wenn kein Client was
sendet blockiert "select()" aber doch auch die hauptschleife, oder?Was soll ich nehmen? (c-worker.ch beschäftigt sich nur mit einer art Chat Server.)
-
Du kannst es in einen Extra Thread packen, oder einen kurzen (0?) Timeout verwenden.
Bye, TGGC (NP Intelligenz)
-
Ob nun blockierend oder nicht solltest du einen extra Thread verwenden, weil du
sonst alleine schon mit dem Netzwerkverkehr deine Hauptanwendung blockierst.
Die blockierenden Sockets haben das Problem, dass du sie schwer wieder beendet
bekommst, außer, wenn du den ganzen Thread von außen abschießt. Oder irre ich
mich da jetzt? - habs lange schon nicht mehr gemacht...
-
In Gems 4 wird beschrieben wie das am besten für wirklich gigantische Server (MMORPGs > 10000 Player) funzt.
Und da kann man weder einen Thread der per select() 10.000 Clients abklöppelt noch 10.000 Threads gebrauchen.
Auf die Mischung kommt es an.
Also könntest Du damit experimentieren.Aber IMHO würdest Du bei meinetwegen 8 Playern weder mit 1client:1thread noch mit 8player-per-select() auf ernsthafte Probleme stoßen...
-
Könntet ihr mir bitte kurz erklären wie ich einen "Extra Thread" erstelle,
oder wo ich ein Tutorial dazu finden kann?Ach ja - und um wegen der Anzahl an Clients etwas präziser zu werden:
Es sollten erstmal ca 500 Clients sein.MfG RoaN;
-
Steht in der MSDN.
Bye, TGGC (NP Intelligenz)
-
_beginthread(ex) oder CreateThread
EDIT: Für genaueres solltest Du aber im WinAPI Forum fragen...
-
Sag bloß das ist nur für Windows!
-
roan312 schrieb:
Sag bloß das ist nur für Windows!
Nein, afaik ist _beginthread() auch unter Unix möglich, CreateThread ist allerdings definitiv WinAPI.
MfG SideWinder
-
roan312 schrieb:
Sag bloß das ist nur für Windows!
Mir scheint Du nimmst ein besonders starkes Zeug...
roan312 schrieb:
Ich hab mich durch das Tutorial von c-worker.ch über Windows Socketprogrammierung durchgearbeitet und schreibe gerade meine Server Klasse.
Sollen wir durch Einatmen unserer eigenen Fürze erkennen, daß Du was multiplattformfähiges suchst...?!?
-
Sorry, der hier
war auf Windows bezogen, nicht auf die (
großartige) c-plusplus community.
Ich kann diese Windows eigene Programmierung irgendwie nicht leiden.Naja, muss ich eigendlich alles als char senden? Da gibt es doch bestimmt eine andere Möglichkeit.
MfG RoaN;
(newline at end of beitrag:)
-
Hat sich erledigt, bin nach einer (halben) Ewigkeit Googlen hier:
fündig geworden.
-
roan312 schrieb:
Naja, muss ich eigendlich alles als char senden? Da gibt es doch bestimmt eine andere Möglichkeit.
char == byte. Das nur immer vor Augen halten. Natürlich musst du Bytes senden. Ob diese dann ein struct repräsentieren, ein serialisiertes Objekt oder eine RMI, bleibt dir überlassen.
Wahrscheinlich suchst du etwas fertiges, was mehr high-level ist. Dazu kann ich dir nicht viel mehr sagen, als dass ich für so was Java oder .Net benutze.