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