mu*index
lezen
thema
GMCP  [protocol]
Het Generic Mud Communication Protocol — gestructureerde JSON-berichten naast de
tekst, en het out-of-bandkanaal waar de meeste moderne clients tegenaan bouwen.
https://www.mudhalla.net/tintin/protocols/gmcp/

Gemeten adoptie
  37 van 886 vermelde spellen hebben we het zien aanbieden (4.2%)
  /nl/games?protocol=GMCP

  De spellen die hier niet meetellen zijn geen spellen zonder het protocol. Een
  spel telt mee wanneer we zijn server de optie in een handshake hebben zien
  aanbieden; de rest zijn servers die het ons niet aangeboden hebben en servers
  waarvan we de handshake niet gelezen hebben, en welke van beide het is kunnen
  we niet zeggen.

  Naar codebase, van de spellen die we hebben vastgesteld
    Evennia              11 van 11 boden het aan
    ROM                  4 van 55 boden het aan
    CircleMUD            2 van 47 boden het aan
    DikuMUD              1 van 35 boden het aan
    AresMUSH             0 van 18 boden het aan
    CobraMUSH            0 van 2 boden het aan
    CoffeeMUD            0 van 32 boden het aan
    FluffOS              0 van 28 boden het aan
    MUCK                 0 van 24 boden het aan
    PennMUSH             0 van 34 boden het aan
    RhostMUSH            0 van 40 boden het aan
    SMAUG                0 van 20 boden het aan
    tbaMUD               0 van 5 boden het aan
    TinyMUSH             0 van 9 boden het aan

GMCP is telnet-optie 201. Zodra erover onderhandeld is, kan de server
gestructureerde gegevens out of band sturen: een pakketnaam en een JSON-payload,
die in dezelfde stroom aankomen als de tekst maar er geen deel van uitmaken.

Char.Vitals { "hp": 412, "maxhp": 500 } is het klassieke voorbeeld. Een client
kan daar een levensbalk mee aansturen zonder het proza af te struinen op
getallen, en dat is precies de bedoeling — een statusweergave die op
patroonherkenning in de tekst gebouwd is, breekt op de dag dat een spel zijn
prompt verandert, en een die op GMCP gebouwd is niet.

De naamruimte van de pakketten berust op gewoonte en niet op een standaard.
Char, Room, Comm en Client zijn breed in gebruik; daarbuiten verzinnen spellen
wat ze nodig hebben, en een client moet meestal verteld worden wat een bepaald
spel stuurt.

WAAROM HET ATCP VERDRONGEN HEEFT

GMCP is de opvolger van ATCP [/reference/protocols/atcp], dat hetzelfde werk
deed met een losser payloadformaat. JSON was de verbetering, en halverwege de
jaren 2010 was de overstap grotendeels voltooid. Een spel dat allebei
ondersteunt is niet ongewoon; een nieuw spel dat alleen ATCP ondersteunt zou dat
wel zijn.

WAT WE METEN

Een spel telt hier mee wanneer zijn server GMCP aanbood in een handshake die we
waargenomen hebben. Dat is een andere bewering dan dat de MSSP van een spel GMCP
1 zegt, waar de meeste protocoltabellen in deze hobby op gebouwd zijn, en die
twee wijken geregeld van elkaar af.

Eén kanttekening bij de meting, uit onze eigen geschiedenis: een tijdlang konden
we GMCP niet zien op servers die ook over MCCP [/reference/protocols/mccp]
onderhandelden, doordat onze telnet-bibliotheek over compressie onderhandelde
zonder de stroom uit te pakken, en alles na het compressiemarkeerpunt was voor
ons ruis. Van minstens één server in ons onderzoek bleek dat hij al die tijd
GMCP sprak. Als een cijfer op deze pagina laag lijkt voor een familie die je
goed kent, is dat soort defect het eerste om te verdenken — bij ons, niet bij
hen.

Zie ook
  MSDP — /nl/reference/protocols/msdp
  ATCP — /nl/reference/protocols/atcp
  Mudlet — /nl/reference/clients/mudlet