Exit-games公司推出了一款名为Photon的网络库产品,并且他们积极开发一个有限的MMO演示。与其使用JSON或XML等方式发送“MovePlayer”(以及相关参数),他们通过枚举将该消息简化为两位数的整数,例如Operations.MovePlayer。毫无疑问,两位数的整数比较长的字符串更小,但我真的不喜欢将每个消息静态地烧录到枚举中的想法。
是否有其他方法可以使MessageID属性根据查找表或其他内容自动分配唯一的两位数整数?有人处理过类似的问题吗?
是否有其他方法可以使MessageID属性根据查找表或其他内容自动分配唯一的两位数整数?有人处理过类似的问题吗?
对于游戏而言,这不是“老派”的做法 - 而是常规操作。
这是因为,与典型的 Web 服务不同,在游戏中,服务器和客户端会 不断 交换数据包。随着玩家数量的增加,需要用来同步每个客户端状态的数据包数量呈指数级增长,因此,如果你的游戏玩家越多,就越重要保持数据包大小小。
此外,超过 MTU 大小(通常约为 1400 字节)将导致数据包分段,这可能会对性能产生 显著的 影响。
还要注意,微软在为 Xbox 360 制作的游戏中有一个每秒 8 千字节的上传和下载限制,因此你几乎 不能够 使用 XML 来进行网络消息的传输创建大型多人在线游戏。
switch
语句,或者存储一个 Dictionary<byte, Type>
或 Dictionary<byte, Func<Message>>
(假设您有一堆从基类 Message
派生的消息类)。这是一种非常老派的做事方式,让我想起了80年代。
我的公司在我们的大型多人在线游戏中使用Agatha(请求代理)进行消息传递: