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

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

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

  特定できたゲームの、コードベース別
    Evennia              11件のうち11件が提供
    ROM                  55件のうち4件が提供
    CircleMUD            47件のうち2件が提供
    DikuMUD              35件のうち1件が提供
    AresMUSH             18件のうち0件が提供
    CobraMUSH            2件のうち0件が提供
    CoffeeMUD            32件のうち0件が提供
    FluffOS              28件のうち0件が提供
    MUCK                 24件のうち0件が提供
    PennMUSH             34件のうち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