[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