ゲームのプロトコルを解読したいですか?クライアントとサーバーがどのように通信するか知っていますか?定義する方法をお教えしましょう

目次

1. Javaプロジェクトリファレンス

2. protobufのファイル定義形式

ベーシックタイプ

特別な分野

3. Javaクラスを生成する

4.利用規約

5.ゲームプロジェクトでの使用方法


 

    ゲームサーバーとクライアント間の通信には多くの形式があり、一部はhttpを使用し、一部はwebsocketを使用しますが、最も一般的なのはゲームで最も一般的なソケットサーバーです。その理由と作成方法については、本日、後で説明しますサーバーとクライアント間のプロトコルについて話しましょう。プロトコルの定義は、サーバーとクライアント間の通信の結果であり、一貫したデータ形式を形成しているため、誰もがそれを解析して、相手が何をして何をしているかを知ることができます。

当初はフォーマットをカスタマイズした方もいらっしゃいますが、コンパクトですが問題があり、安定性に欠ける場合があります。XMLを使用している人もいれば、jsonを使用している人もいます。問題は、フォーマットは良好ですが、ネットワークパッケージが大きすぎて適切でないことです。問題が存在する場合は、解決する必要があります。上記の問題に対する解決策はありますか?明白な答えは、今日話し合ったprotobufです。

protobufは、Googleのオープンソースのクロスプラットフォーム通信プロトコルであり、よりコンパクトで効率的です。あまり意味がありません。テキストを入力してください。

1. Javaプロジェクトリファレンス

以下の依存関係をpom.xmlに追加します。必要に応じてバージョンを選択できます

<dependency>
  <groupId>com.google.protobuf</groupId>
  <artifactId>protobuf-java</artifactId>
  <version>3.6.1</version>
</dependency>

2. protobufのファイル定義形式

option java_package ="com.gamwatcher.soulmsg";
option java_outer_classname = "SoulMsg";
option java_multiple_files = true;
message SOUL_UP_OUT{
   required int64 uid =1;
   repeated int64 costuid =2;
   optional int64 useExp = 3;
}

ベーシックタイプ

.protoタイプ Javaタイプ 備考
ダブル ダブル  
浮く 浮く  
int32 int 可変長エンコーディングを使用します。負の数をエンコードするには効率的ではありません。フィールドに負の数が含まれている可能性がある場合は、sint32を使用してください。
int64 長いです 可変長エンコーディングを使用します。負の数のエンコードは十分に効率的ではありません。フィールドに負の数が含まれる可能性がある場合は、sint64を使用してください。
unit32 int [1] 常に4バイト。値が常に228より大きい場合、この型はuint32よりも効率的です。
unit64 長い[1] 常に8バイト。値が常に256より大きい場合、この型はuint64よりも効率的です。
sint32 int 可変長エンコーディングを使用します。符号付き整数値。エンコーディングは通常のint32よりも効率的です。
sint64 長いです 可変長エンコーディングを使用します。符号付き整数値。エンコーディングは、通常のint64よりも効率的です。
fixed32 int [1]  
fixed64 長い[1] 常に8バイト。値が常に256より大きい場合、この型はuint64よりも効率的です。
sfixed32 int 常に4バイト。
sfixed64 長いです 常に8バイト。
ブール ブール  
ストリング ストリング 文字列は、UTF-8エンコードまたは7ビットASCIIエンコードテキストである必要があります。
バイト ByteString バイトデータを任意の順序で含めることができます

特別な分野

英文 中国人 備考
列挙型 列挙(ゼロから始まる数値)は、フィールドの「事前定義された値のシーケンス」を指定するために使用されます 列挙型{MAN = 0; WOMAN = 1; その他= 3;}
メッセージ 消息体 メッセージユーザー{}
繰り返される 配列/コレクション 繰り返しユーザーユーザー= 1
インポート インポート定義 「protos / other_protos.proto」をインポート
// コメント //コメントに使用
伸ばす 拡大する ユーザー{}を拡張
パッケージ パッケージ名 名前空間に相当し、異なるメッセージタイプの明確な競合を防止するために使用されます

3. Javaクラスを生成する

ダウンロードプロトコル:https://github.com/protocolbuffers/protobuf/releases

protoc.exe --java_out = ../../src/main/java **.proto

4.利用規約

SOUL_UP_OUT.Builder builder = SOUL_UP_OUT.newBuilder();
builder.setUid(1);
builder.addAllCostUid(costUidList);
builder.setUserExp(1000)
builder.build()

5.ゲームプロジェクトでの使用方法

通常のプロトコル形式:

len +暗号化[headMsgId + protoバイナリデータ]

一般的に使用される暗号化アルゴリズム:AESおよびRSA、DES、シンプルで効率的なアルゴリズムを選択します。ゲームが燃えている場合は、もう少し複雑な暗号化アルゴリズムに変更できます。重要ではありません。

クライアントは、長さに従ってデータ長を解析し、分析を読み取ります。とても簡単!!!、サーバー側の同じルール。クライアントとサーバー間の通信はとても簡単です。

概要:protobufは単なるプロトコルフォーマットであり、メッセージをカスタマイズするプロセスを節約します。既製のホイールがあるため、自分で作る必要はありません。また、他のホイールほど良くする必要はありません。最初にそれらを使用してから、原則を理解することはできますが、大したことではありません。 。

おすすめ

転載: blog.csdn.net/perfect2011/article/details/108299619