As I said, the goal is to have multithreading and multiplayer working. And if you know me, you know how lazy I am. So I`m thinking about combining these two things:
One basic idea is to split things up like this:
1. server runs game mechanics, no visual stuff at all
2. client only handles input, output
This makes synchronisation very easy, but high bandwidth is needed and the client multicore cpu isn`t really doing anything.
In my vision, the network also has 1 main server (the one to connect to) and n clients (just I/O). But additionally, there are m help servers. The help servers get specific tasks from the main server that need computation and are appropriate for parallelism. Tasks I have in mind are:
– AI for one specific player
– unit/group AI for one player
Using this approach, even in singleplayer, multicore cpus could be used: the client does IO, the main server is a kind of process manager, and the help servers do computations – all on one machine. In a multiplayer environment, the main server has to distribute tasks to different machines depending on their load, processing power and bandwidth – not trivial at all. However, the classic solution – one server does all but IO – is possible as a fall-back.
I´m not sure how difficult this will be to implement, I think it has not been used in game development yet. Possible reasons can be the debugging problems in distributed systems and the overhead involved when using multiple processes – not threads!