[MUD-Dev] A new MUD-standard

Bruce bruce at puremagic.com
Sat Feb 24 02:07:33 CET 2001


Kwon Ekstrom wrote:

> The transport layer must be a 2 way connection which may or may not
> support compression.  The protocol should allow multiple ways for data
> to be passed between the server and client.  A client-side

I was working on a document about the transport side of things off and 
on for most of the last week, but I've not had the time to really put 
into it, so I'll post thoughts here instead:

Definitions:
  * Message:  The quantum unit of communications between
    the client and server.

  * Payload:  The data being transmitted over the transport
    protocol.

Requirements for a transport layer:
  * Must define the basic wire protocol.

  * Must be able to transmit structured data.  As the
    intent of a MUD protocol is to provide for enhanced
    communications between a MUD server and a client.
    Traditionally, MUD clients and servers communicate
    via flat text which contains little to no markup
    or extraneous data and is directly displayed to the
    user.  To enable more complex interactions between
    the MUD server and client, it is necessary to
    communicate additional information which might not
    be directly displayed to the user in its raw format.

  * Must be extensible.  The uses to which a MUD protocol
    will be put are wide and varied.  They vary from server
    to server as well as from client to client.  The protocol
    should support an extensible set of messages and payloads.

  * Must provide error reporting.  The transport protocol must
    provide adequate error reporting to allow the user to
    detect, report and debug errors.

  * Must be reliable and support ordering.  A message that
    is transmitted successfully (without an error being reported)
    must arrive at the opposite endpoint.  Messages must arrive
    in the order that they are sent.

  * Should support multiplexing.  The transport protocol
    should allow for multiple 'channels' to exist within
    the protocol stream.  This allows for large payloads
    to span a single message, so that a large payload need
    not block anything else from being transmitted.  This
    may be similar to HTTP/1.1 style chunking.

  * Should support authentication.  End to end authentication
    between the endpoints of the connection should be
    provided.

  * Should support compression.  Compression of some sort
    is desirable for streams of text and for larger payloads
    may yield significant gain.

  * May provide a keep-alive operation.  A keep-alive
    operation would provide a mechanism at the transport
    level for detecting terminated connections.  This is
    arguably not the responsibility of the transport
    protocol and may likely belong at the application
    level.

What currently exists within this area?

  * BXXP
  * World Forge's Atlas
  * MCP (not the zmud one)
  * WebMUX (I think this is dead?)
  * HTTP/1.1
  * E's Pluribus

None of those provide all of the above as far as I know, but some do 
come close.  Evaluating all of them within the context of the above 
requirements is a larger project than I currently have the time to carry 
out.

> Now, this is still a very general list, the majority of the concerns
> are with presentation, imho telnet is a wonderful connection to handle
> text based games, although compression would be nice (MCP???) to save
> bandwidth.  Now, here's how I'd use NWLayout for this new standard...

I assume that here, you are referring to zmud's Mud Compression 
Protocol.  It is unfortunate that they chose that moniker as it 
conflicts with the prior work done by people within the MOO community on 
(their) MCP. (http://www.moo.mud.org/mcp)

> It's hardly fair to consider this a "new protocol" but a stack of
> existing protocols...
> 
> Consider this model:
> 
>   transport layer: telnet
>   interface layer: XML
>   presentation layer: HTML+CSS???XSL-T???
> 
> The transport layer can be anyting you want it to be, including a
> custom layer... My new codebase is being developed in Java, and I had
> originally thought of passing java objects, but I think that would
> limit it's potential in the long run.  telnet as I said would work
> well for that, since it's a very low bandwidth versitile protocol.

Consider this:

Using BXXP as a transport layer, there are no defined messages between 
the server and client, except for BXXP control messages for handling the 
management of channels.

Borrowing from the work on MCP, messages between the client and server 
(or, hey, between peer servers or peer clients, it doesn't matter) are 
defined as packages.  This allows any given system to define and 
implement support for additional message types.

When a message is received by an application, it looks at the type of 
the message.  In BXXP, this would be done by examining the Content-type. 
  The appropriate package is looked up and the payload of the message is 
sent to the appropriate code.

MCP provides a great deal of prior art with this type of model in terms 
of some definitions of packages as well as thought put into versioning 
of packages, negotiation between the client and server as to which 
packages (and which versions of those packages) each supports.

Within the context of Mozilla, this could probably begin to build 
directly on some of the underpinnings of Chatzilla, modified to support 
a transport protocol, the concept of packages, etc.  Then, plugins could 
be written via anything that can implement an XPCOM interface, such as 
C++, JavaScript or Python.

Just some thoughts anyway ...

> I admit that this lends alot more power than is needed, but I'm lazy,
> this is less work than defining my own specification, it yields
> quicker results, and should have acceptable response times.  Naturally
> for graphical systems it would be a poor protocol, but for the average
> mud home-brewed mud, it's an acceptable arrangement.

You're leaving out one of the big advantages. :)  Having web integration 
in a server, and moving to a more advanced client is just a step towards 
bringing muds into a more modern age.  What about the MUD that starts to 
serve up RSS files describing recent events so that player-run sites 
(and the official site) can all get the same info directly from the 
source?  Going even further, with something like XML-RPC or SOAP, you 
could provide access to even more info, directly from the MUD.

Interoperability and strong, existing deployed implementations are one 
of the advantages of using existing work.

> I'd write a more detailed list of presentation needs, but I'd most
> likely end up copying the w3c specification for cascading style
> sheets, those alone provide enough power for a mud (Hrmm, XML with CSS
> for a presentation layer?)

XML + CSS can work very nicely.
  - Bruce

_______________________________________________
MUD-Dev mailing list
MUD-Dev at kanga.nu
https://www.kanga.nu/lists/listinfo/mud-dev



More information about the mud-dev-archive mailing list