游戏中的网络消息序列化

4
Exit-games公司推出了一款名为Photon的网络库产品,并且他们积极开发一个有限的MMO演示。与其使用JSON或XML等方式发送“MovePlayer”(以及相关参数),他们通过枚举将该消息简化为两位数的整数,例如Operations.MovePlayer。毫无疑问,两位数的整数比较长的字符串更小,但我真的不喜欢将每个消息静态地烧录到枚举中的想法。

是否有其他方法可以使MessageID属性根据查找表或其他内容自动分配唯一的两位数整数?有人处理过类似的问题吗?

2个回答

3

对于游戏而言,这不是“老派”的做法 - 而是常规操作。

这是因为,与典型的 Web 服务不同,在游戏中,服务器和客户端会 不断 交换数据包。随着玩家数量的增加,需要用来同步每个客户端状态的数据包数量呈指数级增长,因此,如果你的游戏玩家越多,就越重要保持数据包大小小。

此外,超过 MTU 大小(通常约为 1400 字节)将导致数据包分段,这可能会对性能产生 显著的 影响。

还要注意,微软在为 Xbox 360 制作的游戏中有一个每秒 8 千字节的上传和下载限制,因此你几乎 不能够 使用 XML 来进行网络消息的传输创建大型多人在线游戏。


关于如何将一个字节转换为消息类型:只需使用 switch 语句,或者存储一个 Dictionary<byte, Type>Dictionary<byte, Func<Message>> (假设您有一堆从基类 Message 派生的消息类)

1

我肯定不会穿着肩垫并把衣领翻起来,所以我会去看看,虽然我快速浏览了一下,但我没有看到它如何否定“2个整数比一个字符串小”的说法。 - George R
它并不是。这是一种更现代的处理通信的方式。 - rboarman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接