Server mit nur einem Thread?
-
Hi.
Ich will einen server für so ein spiel schreiben. Da bei threads dieser ganze andere krams dazugeschrieben werden muss, würde ich gerne mit nur einen einzelnen thread benutzen. select() macht sich eher schlecht, da ich jede 500 ms DoPhysicsStep() oder so was aufrufen muss. Was sollte ich benutzen?Danke im voraus...

-
lk schrieb:
select() macht sich eher schlecht, da ich jede 500 ms DoPhysicsStep() oder so was aufrufen muss. Was sollte ich benutzen?
select()
Wenn man die Funktion richtig benutzt, blockiert die nicht.
-
UDP nutzen.
-
hi
je nach OS gibts es spezialitaeten.
unter windows wuerde sich dafuer z.b. Overlapped completion port anbieten.Meep Meep
-
-
Ad aCTa schrieb:
UDP nutzen.
Geht nicht, da der spiel-client nur TCP verwendet.
Tyroxx, aber wie?
Vieleicht meinst du etwas wie fcntl() ? War in google und ich bin gerade am herausbrobieren, aber keine Ahnung ob das was nützen wird ^^.
-
int select( __in int nfds, __inout fd_set *readfds, __inout fd_set *writefds, __inout fd_set *exceptfds, __in const struct timeval *timeout );timeout [in] Maximum time for select to wait, provided in the form of a TIMEVAL structure. Set the timeout parameter to null for blocking operations.
-
> Geht nicht, da der spiel-client nur TCP verwendet.
Schlechte Wahl, dafür TCP zu nehmen.
> z.b. Overlapped completion port anbieten.
Completion Ports ohne Threads sind sinnlos. Asynchrone I/O, also Overlapped oder dev/epoll oder kqueue wären eine sinnvolle Alternative.
-
Schlechte Wahl, dafür TCP zu nehmen.
Rede nicht so ein Quatsch, das kommt auf das Spiel an.
-
dddddddddddd schrieb:
Schlechte Wahl, dafür TCP zu nehmen.
Rede nicht so ein Quatsch, das kommt auf das Spiel an.
Genau. Das spiel heist minecraft und da ist es zeimlich wichtig, dass alle daten ankommen. Natürlich ist da was dabei was über UDP ableufen könnte, aber das lohnt sich dann nicht mehr. www.minecraft.net
-
Nonblocking Sockets + select()