13. MMO游戏服务器应用程序协议
#go #zinx

[zinx]

<1.Building Basic Services with Zinx Framework>
<2. Zinx-V0.2 Simple Connection Encapsulation and Binding with Business>
<3.Design and Implementation of the Zinx Framework's Routing Module>
<4.Zinx Global Configuration>
<5.Zinx Message Encapsulation Module Design and Implementation>
<6.Design and Implementation of Zinx Multi-Router Mode>
<7. Building Zinx's Read-Write Separation Model>
<8.Zinx Message Queue and Task Worker Pool Design and Implementation>
<9. Zinx Connection Management and Property Setting>

[ZINX应用程序 - MMO游戏案例研究]

<10. Application Case Study using the Zinx Framework>
<11. MMO Online Game AOI Algorithm>
<12.Data Transmission Protocol: Protocol Buffers>
<13. MMO Game Server Application Protocol>


MMO游戏源代码

https://github.com/aceld/zinx/tree/master/zinx_app_demo/mmo_game


在MMO游戏演示应用程序的上下文中,客户端部分充当服务器,而本章中即将到来的内容涉及游戏的服务器部分。在开发之前,有必要定义双方之间的协议。

13.1协议定义

根据客户端应用程序的要求,可以理解,客户端将以下类型的应用程序协议游戏数据传输到服务器,如表13-1所示。

表13-1

msgid 客户 服务器 æè?°
1 - Syncpid 同步玩家的登录ID(用于玩家ID)。
2 谈话 - 世界聊天。
3 MovePackege - 运动。
200 - 广播 广播消息(TP 1:世界聊天,2:坐标同步(Spawn Point Sync),3:操作,4:移动后更新的坐标)。
201 - Syncpid disconnect/aoi消失的广播消息。
202 - Syncplayers 同步附近玩家(包括自己)的位置信息。

13.1.1表说明

表中每列的含义如下:

MSGID :当前通信协议的消息ID,是Zinx中定义的MSGID的代名词。
客户端:客户端协议的名称以及当前消息由客户端启动。
服务器:服务器协议的名称以及当前消息由服务器启动。
描述:当前协议的描述。

13.1.2协议含义

在表13-1中,总共有6个协议,它们的含义如下:

Syncpid协议:由服务器启动给客户端,消息ID 1.它通知其他在线用户的客户当前播放器已在线。

谈话协议:由客户端启动到服务器,消息ID2。它表示客户端发起的世界聊天消息,告知服务器广播消息。

位置协议:由客户端启动到服务器,消息ID 3.它带有客户端播放器运动的坐标。

广播协议:由服务器启动到客户端,消息ID200。它代表了向所有在线玩家客户端的服务器发射的广播消息。 TP变量指示不同类型的业务。

Syncpid协议:由服务器启动到客户端,消息ID201。它代表了服务器发射的广播消息,用于播放器断开或更改视点。

Syncplayers协议:由服务器向客户端发起,消息ID202。它将周围玩家的位置(包括玩家自己的位置)同步到其他玩家。

13.2原始协议定义

本节将根据表13-1中提供的协议定义格式定义Protobuf的特定数据协议格式。

13.2.1协议一(msgid = 1)

SyncPID协议用于将播放器登录后服务器生成的播放器的唯一ID同步。此ID用于识别播放器。
原始协议定义如下:

message SyncPid {
    int32 Pid=1;
}

相关参数如下:
(1)PID:玩家ID。

13.2.2协议二(MSGID = 2)

谈话协议,世界聊天,此消息由客户端启动。

原始协议定义如下:

message Talk {
    string Content = 1;
}

相关参数如下:
(1)内容:聊天消息。

13.2.3协议三(MSGID = 3)

位置协议,移动的坐标,有关客户端播放器运动坐标的信息,由客户端发起。

原始协议定义如下:

message Position {
    float X = 1;
    float Y = 2;
    float Z = 3;
    float V = 4;
}

相关参数如下:
(1)x:3D地图中的x轴坐标。
(2)y:3D地图中的高度坐标,而不是y轴。
(3)z:y轴在3D地图中坐标。
(4)V:物体或任务的旋转角(0〜360°)。

13.2.4协议四(MSGID = 200)

广播协议,广播消息,服务器向所有在线玩家客户端广播消息,而TP变量指示不同类型的业务。

原始协议定义如下:

message BroadCast {
    int32 Pid = 1;
    int32 Tp = 2;
    oneof Data {
        string Content = 3;
        Position P = 4;
        int32 ActionData = 5;
    }
}

相关参数如下:

(1)PID:播放器ID。
(2)TP:广播消息的类型。 1对于世界聊天,2用于坐标,动作3,运动后的坐标更新4。

(3)数据:传输的特定消息格式。数据用“单一”关键字装饰。根据TP,数据将具有不同的特定数据类型。内容用于TP = 1,广播世界聊天数据;位置用于TP = 2或4,广播坐标数据; ActionData用于TP = 3,广播特定的播放器动作数据。

13.2.5协议五(MSGID = 201)

Syncpid协议,广播消息,播放器脱机或播放器的可见性从服务器发起的AOI区域消失。

原始协议定义如下:

message SyncPid {
    int32 Pid = 1;
}

相关参数如下:
(1)PID:玩家ID。

13.2.6协议六(MSGID = 202)

Syncplayers协议,将附近玩家(包括当前玩家)的位置同步到其他玩家。由服务器启动。

原始协议定义如下:

message SyncPlayers {
    repeated Player ps = 1;
}

message Player {
    int32 Pid = 1;
    Position P = 2;
}

相关参数如下:
(1)播放器:要同步的玩家收集,装饰着“重复”的关键字。
(2)PID:播放器ID。
(3)位置:位置信息。


MMO游戏源代码

https://github.com/aceld/zinx/tree/master/zinx_app_demo/mmo_game


[zinx]

<1.Building Basic Services with Zinx Framework>
<2. Zinx-V0.2 Simple Connection Encapsulation and Binding with Business>
<3.Design and Implementation of the Zinx Framework's Routing Module>
<4.Zinx Global Configuration>
<5.Zinx Message Encapsulation Module Design and Implementation>
<6.Design and Implementation of Zinx Multi-Router Mode>
<7. Building Zinx's Read-Write Separation Model>
<8.Zinx Message Queue and Task Worker Pool Design and Implementation>
<9. Zinx Connection Management and Property Setting>

[ZINX应用程序 - MMO游戏案例研究]

<10. Application Case Study using the Zinx Framework>
<11. MMO Online Game AOI Algorithm>
<12.Data Transmission Protocol: Protocol Buffers>
<13. MMO Game Server Application Protocol>


作者:
不和谐:https://discord.gg/xQ8Xxfyfcz
zinx:https://github.com/aceld/zinx
github:https://github.com/aceld
Aceld的家:https://yuque.com/aceld