mu*index
読み方
テーマ
GMCP  [プロトコル]
Generic Mud Communication Protocol —
テキストと並んで流れる構造化されたJSONメッセージであり、現代のクライアントの多くが土台にしている帯域外チャネルです。
https://www.mudhalla.net/tintin/protocols/gmcp/

実測した採用状況
  掲載957件のゲームのうち45件で提供を観測(4.7%)
  /ja/games?protocol=GMCP

  ここに数えていないゲームは、そのプロトコルを持たないゲームということではない。数えるのは、そのサーバーがハンドシェイクでそのオプションを提供するのを観測したとき。残りは、当サイトに提供しなかったサーバーと、ハンドシェイクをまだ読んでいないサーバーであり、どちらなのかは言えない。

  特定できたゲームの、コードベース別
    Evennia              14件のうち11件が提供
    ROM                  58件のうち6件が提供
    CircleMUD            46件のうち3件が提供
    DikuMUD              34件のうち1件が提供
    AresMUSH             23件のうち0件が提供
    CobraMUSH            2件のうち0件が提供
    CoffeeMUD            46件のうち0件が提供
    FluffOS              42件のうち0件が提供
    MOO                  1件のうち0件が提供
    MUCK                 24件のうち0件が提供
    PennMUSH             35件のうち0件が提供
    RhostMUSH            40件のうち0件が提供
    SMAUG                20件のうち0件が提供
    tbaMUD               5件のうち0件が提供
    TinyMUSH             9件のうち0件が提供

GMCPはtelnetオプション201です。ネゴシエートが済むと、サーバーは構造化データを帯域外で送れる
ようになります。パッケージ名とJSONのペイロードが、テキストと同じストリームで届きますが、テキストの 一部ではありません。

Char.Vitals { "hp": 412, "maxhp": 500 } が定番の例です。クライアントはこれだけで体力バーを動かせて、
文章から数値を拾い集める必要がありません。それがこのプロトコルの要点そのものです — テキストの
パターンマッチで作ったステータス表示は、ゲームがプロンプトを変えた日に壊れますが、GMCPで作ったものは 壊れません。

パッケージの名前空間は標準化されたものではなく、慣習によるものです。Char、Room、Comm、Client
は広く使われていますが、そこから先はゲームが必要なものを考え出すので、あるゲームが何を送ってくるかは、 たいていクライアントに教えてやる必要があります。

ATCPに取って代わった理由

GMCPはATCP [/reference/protocols/atcp]の後継です。ATCPは同じ仕事を、より緩いペイロード形式で
こなしていました。改良点はJSONで、移行は2010年代半ばにはおおむね完了していました。両方に対応する
ゲームは珍しくありませんが、ATCPだけに対応する新しいゲームは珍しいでしょう。

当サイトが実測するもの

ここに数えられるのは、当サイトが観測したハンドシェイクで、そのゲームのサーバーがGMCPを提供した 場合です。これは、ゲームのMSSPがGMCP
1と述べていることとは別の主張です。このホビーのプロトコル表の 大半は後者を土台にしていますが、両者はしばしば食い違います。

当サイト自身の経緯から、実測についての注記が1つあります。ある時期、MCCP [/reference/protocols/mccp]
も併せてネゴシエートするサーバーでは、GMCPが見えていませんでした。当サイトのtelnetライブラリが圧縮を
ネゴシエートしながらストリームを展開しておらず、圧縮の開始位置より後はすべて雑音になっていたためです。
調査したサーバーのうち少なくとも1つは、実は最初からGMCPを話していたことが分かりました。よく知っている
系統についてこのページの数値が低く見えるなら、まず疑うべきはこの種の欠陥です — 相手側ではなく、 当サイトの側の。

関連項目
  MSDP — /ja/reference/protocols/msdp
  ATCP — /ja/reference/protocols/atcp
  Mudlet — /ja/reference/clients/mudlet