- Sep 19, 2000
- 10,286
- 147
- 106
I've been musing over the idea of making a multiplayer game. Part of my musing has lead me to consider the problem "How do support a large number of players without needing large server farms." Further, how could you make the game experience just as fun with 2 players as it is with 60 players.
The first thought I had about solving this problem was to shift all data processing on to the clients, keeping communication with the server at a bare minimum. However, I am then reminded of the "diablo problem", that is, with the clients doing everything, the clients can easily cheat and game things.
This led me to the consideration of doing a distributed server model, every client would act as a server, syncing with some main server and never handling their own processing. This seems like it might work, however it still runs a pretty high risk of cheating. Someone could join two computers, hack them to use each other as a server, and then have whatever fun they like. Or worse, they could send false syncing info back to the server. This would spoil things for everyone.
So my next thought came to a hierarchical setup. Players that have played fairly for the longest amount of time would be promoted to act as servers for other players. If something fishy goes on, those players would be demoted and someone else promoted. This would remove cheating all together, but it would significantly reduce it.
The problem with doing a model like this would be syncing. This could be reduced in a couple of ways. The first would be restricting which servers serve which sections of the game. Make it so that players who are close together use the same server for syncing. This runs the risk of one players computer getting bogged down if the players decide to all congregate into one location.
The other solution would be to employ a model similar to a system cache. Each player connects to servers based on lat and bandwidth available. When a player interacts in some way with a resource, one of two things could happen. If the server owns that resource, the action happens imminently. If the server does not own the resource, it communicates with the main server and lets it know "Hey, give me resource X." The main server then communicates to whoever currently owns the resource, tells them "Hey, person x needs this resource" and to which they finish up what they are doing and transfer all resource info to the second player server. Or, in order to avoid unnecessary transfer lag, the player could be linked to the owner of the resource and do whatever needs to be done. This means either higher amounts of data transfers for server players or increased lag for each of the players. Either way, it runs the risk of being very laggy when a given resource is highly contested (IE, two players communicating with two servers start shooting each other or something).
IDK, this is just my musings. I've been thinking "why can't games run more like bittorrent" and trying to figure out both a way to keep cheating down while at the same time leveraging each of the players processing power/network resources for the good of the game.
Any thoughts or ideas (or things I didn't consider)? How would you approach the problem of using unsecure systems as game servers?
The first thought I had about solving this problem was to shift all data processing on to the clients, keeping communication with the server at a bare minimum. However, I am then reminded of the "diablo problem", that is, with the clients doing everything, the clients can easily cheat and game things.
This led me to the consideration of doing a distributed server model, every client would act as a server, syncing with some main server and never handling their own processing. This seems like it might work, however it still runs a pretty high risk of cheating. Someone could join two computers, hack them to use each other as a server, and then have whatever fun they like. Or worse, they could send false syncing info back to the server. This would spoil things for everyone.
So my next thought came to a hierarchical setup. Players that have played fairly for the longest amount of time would be promoted to act as servers for other players. If something fishy goes on, those players would be demoted and someone else promoted. This would remove cheating all together, but it would significantly reduce it.
The problem with doing a model like this would be syncing. This could be reduced in a couple of ways. The first would be restricting which servers serve which sections of the game. Make it so that players who are close together use the same server for syncing. This runs the risk of one players computer getting bogged down if the players decide to all congregate into one location.
The other solution would be to employ a model similar to a system cache. Each player connects to servers based on lat and bandwidth available. When a player interacts in some way with a resource, one of two things could happen. If the server owns that resource, the action happens imminently. If the server does not own the resource, it communicates with the main server and lets it know "Hey, give me resource X." The main server then communicates to whoever currently owns the resource, tells them "Hey, person x needs this resource" and to which they finish up what they are doing and transfer all resource info to the second player server. Or, in order to avoid unnecessary transfer lag, the player could be linked to the owner of the resource and do whatever needs to be done. This means either higher amounts of data transfers for server players or increased lag for each of the players. Either way, it runs the risk of being very laggy when a given resource is highly contested (IE, two players communicating with two servers start shooting each other or something).
IDK, this is just my musings. I've been thinking "why can't games run more like bittorrent" and trying to figure out both a way to keep cheating down while at the same time leveraging each of the players processing power/network resources for the good of the game.
Any thoughts or ideas (or things I didn't consider)? How would you approach the problem of using unsecure systems as game servers?
