単純なクライアント <> サーバー マルチプレイヤー ゲーム用の単純なサーバーを作成していたとき、翻訳ライブラリを使用して次のテキスト ベースのプロトコルを考えました。基本的に、各コマンドには特定の意味がありました。たとえば、次のようになります。
1 = character starts turning right
2 = character starts turning left
3 = character stops turning
4 = character starts moving forward
5 = character stops moving
6 = character teleports to x, y
そのため、クライアントは単純に次のようにブロードキャストして、プレーヤーが現在前進して右に曲がっていることを通知します。
4
1
または、100x200 にテレポートするには:
6#100#200
# はパラメーター区切り文字です。
ソケット接続はプレーヤー識別子に接続されるため、メッセージがどのプレーヤーに属しているかを知るために識別子をプロトコルでブロードキャストする必要はありません。
もちろん、すべてのデータはサーバー側で検証されますが、それは別の主題です。
さて、これは私には非常に効率的であるように思えます。私が前進して右折していることをサーバーに通知するのにわずか 2 バイトです。
ただし、私が見たほとんどの「プロフェッショナル」なコード スニペットは、オブジェクトまたは xml コマンドを送信しているように見えました。これには、より多くのサーバー リソースが必要なようですね。
テキストベースのプロトコルが効率的である理由についての私の未経験の論理には欠陥がありますか? または、リアルタイム アクション マルチプレイヤー ゲームの推奨プロトコルは何ですか?
複数のクラスター/サーバーを使用して 2D マルチプレイヤー ゲームの過剰な帯域幅をカバーしたり、安全な同期の問題や煩わしさを回避したりしたくないため、できるだけ効率的なプロトコルをセットアップしたいと考えています。