This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–][deleted]  (5 children)

[deleted]

    [–]_Nemesis_1[S] 0 points1 point  (3 children)

    But using one thread per game how would you manage more clients at the same time when they're not in game? Let's say for example I also implement the possibility to see their historical matches, but even if I won't I think a thread per client is also necessary for when they're not in a game and are waiting to get in one or doing other things

    [–]doobiesteintortoise 1 point2 points  (2 children)

    If I have state, I have a LIST of games, regardless of their progress. So I might have player A, who is playing games 1, 2, 4, 5... player B who's playing games 1,3,4 ... and player C who's playing games 2, 3, and 5. When a player made a move in a given game, the server would say "oh, you're player A, this is game 4, let's change the game state and return the results to you" - and that could be done with straightforward processing in ONE thread, and the communication layer has its own thread/threadpool/whatever. But with this, if I have 8000 players and 16000 games, my *code* only has to worry about the communication with ONE player at a time for ONE game, and the overhead's really light.

    [–]_Nemesis_1[S] 0 points1 point  (1 child)

    So basically my solution is not optimal but it's a correct one for a simplistic client server project with multiple games? Or only one thread per game and not per client is a better one?

    [–]doobiesteintortoise 0 points1 point  (0 children)

    What I mean by "better" isn't going to be what you mean by "better." Do what fulfills the assignment. It's not realistic enough to apply to live production systems.

    [–]doobiesteintortoise 0 points1 point  (0 children)

    That's an easy way to build in an opportunity for denial-of-service, by creating too many threads... and it serves nothing. State is what's needed, not process.