[MUD-Dev] Re: In game bulletin boards vs. Web based.
emily at thelonious.new.ox.ac.uk
Wed Jun 24 07:13:11 New Zealand Standard Time 1998
J C Lawrence (claw at under.engr.sgi.com) spake thusly:
> On Sun, 14 Jun 1998 13:29:34 +0000 (GMT)
> Matt Chatterley<matt at mpc.dyn.ml.org> wrote:
> Distributed servers seems to be a popular idea of late.
> Within the last fortnight I've cauight mention and hint of four
> distributed server attempts out there (outside of the still bubbling
> attempt to make ICGnu distributed). None seemed to be much beyond
> the, "Umm, I got this great idea but don't know C very well, does
> anybody wanna help?" stage.
I've got one; the code's pretty ugly and inefficient but it does things.
> Another chap was looking at the central server with client-side
> plug-ins, something like what Dr Cat has mentioned briefly ("special
> characters" can create private worlds in the main world), but with the
> difference that the master copy of the private would would be located
> on the player's client and would auto-update and resolve against the
> copy on the central server upon connection, thus allowing the world to
> be developed in-abstentia of the server.
My code is entirely server-based; all world objects are on the servers.
The idea is that a given geographical area of the mud is assigned to
each server (the rationale being that most objects will tend to stay
within the same geographic area most of the time). There's a central
server which holds user passwords and names and the addresses of all
the other servers. Objects can migrate between servers; my RPC mechanism
allows you to send objects as parameters, and there's a method
of automatically marshalling and initialising objects based on a table
of variable pointers. That makes the RPC work a bit harder; basically,
when sending an RPC message it first looks on the local server, then goes
and asks the node where the object was created if the object's there (the
originating node is coded into the object name, in the form
node.object). If it is it does the RPC, otherwise the creating node
tells the calling node where the object is (the object tells the creating
node where it is whenever it moves).
Obviously reliability of nodes is an interesting problem here;
basically, I intend object transfers to fail unless the creating server
has been notified of the object move (so objects can always be found),
and I intend to give a convincing excuse if the node an object wants
to move to is down (so if Bubba wants to go to SomewhereLand, on another
node, he has to go tthrough a customs post or on a boat; if the node is down
then the customs post is closed or there's a storm)
I haven't decided what to do if a server fails halfway through a transfer
yet; I'll probably have some system for recursive transfers which I'll
make atomic, so Bubba and all his possessions either all transfer correctly
or not at all. Anyway, I'm a bit further than the 'wouldn't it be neat'
stage; I've got 20-30,000 lines of code, and the actual RPC/distribution
stuff works quite nicely at the moment (it's in C++). Trouble is I have
no time at the moment thanks to working on Harmony (widget set) and
fulltime real work starting in August.
More information about the MUD-Dev