[MUD-Dev] DIS: Client-Server vs Peer-to-Peer

Niklas Elmqvist d97elm at dtek.chalmers.se
Tue Nov 24 22:06:23 CET 1998


I have a little problem (which is not in any way unrelated to MUDs,
although it is border-line), so I thought I would post to this list in the
hope of getting some advice from some more experienced members. 

Here's the situation:
I'm currently drafting a proposal for a group project course me and my
fellow classmates will undertake next year. This course will include a
range of several different projects which all students will be able to
choose from -- I am aiming to contribute one of the project ideas.

The subject is the construction of a complete DIS (Distributed Interactive
Simulations) system with real-time simulators used for education as well
as entertainment. Hopefully, we will be able to come up with a system that
will accept a plethoria of heterogenous clients (potentially hundreds of
them) connecting from an unsafe network (such as the Internet) and playing
in a shared world. With enough flexibility built into the system, I am
envisioning sort of a universal battlefield simulator able to support
simulations of all kinds of battles -- why not pop onto the net, take a
look at the current scenarios being played out, and then jump into a
simulation of Omaha Beach at D-Day, for example? Or why not the Battle of
Endor, Thermopylae, Hastings or Gettysburg?

That's the idea, anyway. Of course, I am concealing all of these
entertainment aspects in a cloak of respectability; I am not entirely sure
everyone would approve of a game project! ;) 

I am also recommending the project members to release the simulator system
as Open Source under the GPL at the end of the project (GNU Sim?), so
hopefully, this quite ambitious undertaking will bring something back to
the community. You can do a whole lot with eight enthusiastic developers
in a full year! (Despite the fact that we won't be exclusively working on
this project.) 

Enough chattering -- this brings me to the problem. The term DIS is quite
general; for one thing, there is a DIS standard. I have some problems with
it, though, and I am looking for justification of the deviations I want to
make from the standard (in general, I believe it is a good read). One of
the keypoints of DIS is that it is a strict peer-to-peer architecture,
which means that there is no central server which makes the decisions and
calls the shots. For example, in the DIS standard, the shooting client is
responsible for reporting the shot and the ballistics to the targeted
client, but it us up to the targeted client to decide whether the shot is
a hit or not, and the extents of the damages. In a trusted network
environment (such as the "safe" LANs the US DoD no doubt is using DIS on),
this is no problem.  To me, however, this instinctively feels like a big
stumbling block in an untrusted network such as the Internet -- horrible
visions of Interstate '76 and Diablo multiplayer rise up to haunt me. In a 
naive DIS implementation running on the devious Internet, clients could
easily be hacked (especially if the client is Open Source) and modified to
always tell the shooter that the shot missed (or that the damages are
minimal). Clearly, this simply won't do. (Yes, one in Raph's collection of
laws, the one about clients being in the hands of the enemy, does spring
to mind.)

So ATM I am seriously thinking about proposing a client-server
architecture instead of peer-to-peer. I now need justification for this
decision. Basically, I am looking for all the good arguments why
client-server should be used instead of peer-to-peer as well as the
advantages and disadvantages of each approach. Some sample questions:

 - Is it a sound decision (using client-server)?
 - Can peer-to-peer be implemented without a lot of hassle with
	authentication and so on? How?
 - Is it possible in an Open Source project where anyone has access to the
	source? 
 - Are there any large-scale multiplayer games (MMPOG, I believe they are
	called) which uses a peer-to-peer architecture?

(Besides, it is much more fun to write a bad-ass server than a lot of
uninteresting clients, which might be justification enough... Sort of.)

While I am at it and provided the answer is "yes, client-server is the way
to go" I might as well ask some additional questions: 
 - How would you keep the "distributed" in DIS with a client-server
	architecture?
 - What things can be trusted to the client? (Yes, I know there has been a
	rather extensive thread on that.) Does anyone know, for example,
	what the client-server relationships/responsibilities are for
	games such as Quake?

Any comments, suggestion, pointers or links to documentation are welcome. 

Thanks for your time.

-- Niklas Elmqvist (d97elm at dtek.chalmers.se) ----------------------
  "The trouble with being a god is that you've got no one to 
   pray to."
		-- Terry Pratchett, Small Gods








More information about the mud-dev-archive mailing list