远程共享对象:哪个更好,一个阵列SO还是多个对象SO?

时间:2009-09-15 19:45:39

标签: flex flash remoting fluorinefx shared-objects

我正在使用Flash / Flex为客户端和FluorineFX(就像FCS / FMS,除了它是用.NET编写的)在服务器端构建一个多人游戏。我的问题是关于RTMP协议上共享对象的使用和性能。

基本上,我计划在屏幕上同时拥有相当多的对象,每个对象都有自己的坐标,行为,视觉效果等。连接到同一个房间的所有用户都能够看到这些对象并与之交互

使用一个包含游戏世界中所有对象的单个数组共享对象可以非常快速地在所有客户端上快速同步所有对象,但似乎它可能性能很重而且我会丢失在每个单独对象的安全性方面具有灵活性。

或者,在游戏世界中为每个对象使用不同的共享对象会给我很大的灵活性,即根据位置获取哪些对象(以最小化网络性能),但我担心大量的共享我最终会得到具有唯一名称的对象,并且必须让客户端在移动时不断地连接/断开连接到不同的共享对象。

对于RTMP我不是专家,但我知道处理这个问题的每种方法的优点/缺点,我意识到我可以在技术上根据情况使用这两个概念的混合,但我真的在寻找有远程共享对象经验的人,我可以从中收集一些知识。

有人愿意分享他们在这个主题上的经历吗?

3 个答案:

答案 0 :(得分:0)

我们正在使用Flex-WebORB-MSMQ和RTMP来实现悲观并发,因此问题与我们没有经常连接/断开连接的问题不完全相同。这是我的问题,是否有必要连接/断开使用不同的共享对象?如何为不同的对象使用消息传递和不同的通道?直观地说,我会选择第二种方式,每个对象都有一个共享对象,但如果你真的需要每次连接/断开连接,那么恐怕事情不再顺利进行(我想你必须测试一下) 。另一方面,如果对象不是太复杂,使用一个远程对象似乎不是太大的问题...当然,如果用户没有权限看到其中一个对象,那么存储它们在一个共享对象中有点危险,因为用户可以拦截网络流量......

答案 1 :(得分:0)

我只有有限的远程共享对象体验,到目前为止我还没有使用远程对象实现任何“大”,但重新考虑了Cardoen先生的上述评论,想象一下每个房间有1000个房间和100个游戏对象的游戏。作为玩家,您一次只能在一个房间里。如果游戏的设计是为了让所有游戏对象都在一个大的SO中,那么很明显这不是一个好的解决方案。

如果游戏真的被设计为“玩家只能看到他所在的房间里的东西”,那么每个房间你都可以有一个SO。但我想这归结为游戏设计。

答案 2 :(得分:0)

我们正在为我们的游戏使用Flash和FluorineFx,但是对于我们的目的,共享对象看起来有点“健谈”,所以我们选择将消息推送到连接的客户端。这使我们可以完全控制要发送的消息,消息优先级和频率。

共享对象是快速启动和运行的好方法,但您可能会发现以后遇到性能问题。

不可否认,我们的游戏是一款儿童MMO游戏,因此我们不会完全同步所有客户,因此我们的多人迷你游戏也基于此原因。

许多这些类型的决定取决于您正在构建的游戏类型:

  • 是回合还是实时?
  • 最大玩家数是多少 一场比赛?
  • 正在处理多少逻辑 客户端与服务器?

有一本名为ActionScript for Multiplayer Games and Virtual Worlds的好书讨论了这些问题。