代码之家  ›  专栏  ›  技术社区  ›  Lusid

远程共享对象:一个数组SO或多个对象SOs哪个更好?

  •  1
  • Lusid  · 技术社区  · 16 年前

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

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

    使用单个数组共享对象来保存游戏世界中的所有对象将使所有对象之间的所有对象非常快地同步变得非常容易,但是它似乎性能很重,并且当涉及到每个对象的安全性时,我将失去灵活性。

    或者,在游戏世界中每一个对象使用不同的共享对象会给我很大的灵活性,因为谁可以根据位置获得什么对象(以最小化网络性能),但是我担心大量的共享对象,这些名字将是我唯一的名字。并且必须让客户机在移动时不断地连接/断开与不同共享对象的连接。

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

    有谁愿意分享他们在这个话题上的经验吗?

    3 回复  |  直到 16 年前
        1
  •  0
  •   Lieven Cardoen    16 年前

    我们使用Flex WebORB MSMQ和RTMP来实现悲观并发,因此问题与我们没有持续连接/断开连接完全不同。我的问题是,当使用不同的共享对象时,是否需要连接/断开连接?对于不同的对象使用消息传递和不同的通道怎么样?直觉上,我会选择第二种方式,即每个对象都有一个共享对象,但如果每次都需要连接/断开连接,那么我担心事情不会再顺利地工作(我想你必须测试一下)。另一方面,如果对象不太复杂,那么使用一个远程对象似乎不是什么大问题。。。当然,如果用户没有查看其中一个对象的权限,那么将它们存储在一个共享对象中有点危险,因为用户可能会拦截网络流量。。。

        2
  •  0
  •   Jonny    16 年前

    我只有有限的远程共享对象体验,到目前为止,我还没有使用远程对象实现任何“大”的东西,但重新思考卡多恩先生的上述评论,想象一下,有一个游戏,每个房间有1000个房间和100个游戏对象。作为球员,你一次只能在一个房间里。如果游戏的设计使所有的游戏对象都在一个大的so中,显然这不是一个好的解决方案。

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

        3
  •  0
  •   Nathan Smith    15 年前

    我们在游戏中使用Flash和FluorineFx,但共享对象对于我们来说似乎有点“闲聊”,所以我们选择将消息下推到连接的客户端。这使我们可以完全控制要发送的消息、消息优先级和频率。

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

    不可否认,我们的游戏是一个儿童MMO,所以我们不必担心同步所有客户端完美,我们的多人迷你游戏都是基于这个原因。

    很多此类决策取决于您正在构建的游戏类型:

    • 是基于转向还是实时?
    • 运动员的最大人数是多少? 为了一场比赛?
    • 处理了多少逻辑 客户机和服务器?

    有本好书叫 ActionScript for Multiplayer Games and Virtual Worlds 谈论这些问题。