当我为一个简单的客户端<>服务器多人游戏编写一个简单的服务器时,我想到了以下使用翻译库的基于文本的协议。基本上,每个命令都有一定的含义,例如:
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 多人游戏的过多带宽,以及安全同步问题和麻烦。