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

基于浏览器的实时游戏

  •  0
  • thethanghn  · 技术社区  · 17 年前

    我想实现一个支持大量成员并提供实时操作的bbg。

    我目前的游戏一直在运行,但它似乎很快就会耗尽。

    我使用的方法是轮询。我猜空闲用户的浪费会导致服务器烧坏(服务器是C#,客户端是Javascript)

    我怎样才能解决这个问题?

    4 回复  |  直到 16 年前
        1
  •  2
  •   cmroanirgo    16 年前

    可能 http://goldfishserver.com 可能对你有用(如Comet服务器)。它提供了一个简单的API,允许向网页发送推送通知。简言之,当您的数据更新时,将其(一些有效负载数据)发送到Goldfish服务器,您的客户端浏览器将收到通知,其中包含相同的数据。

    基于回合的游戏非常适合金鱼,不过根据您的设计,可能会使用更大的世界系统。

    免责声明:我是金鱼的开发者。

        2
  •  1
  •   Markus    16 年前

    你总是会有一些滞后。我不确定您是否正在轮询单个更新,但您可以查看以下操作,以降低延迟和密集的服务器资源:

    • 对所有更新进行一次轮询。不要在一次通话中调查“生命数”和在另一次通话中调查“位置”,而是在一次点击中完成。

    • 由于更新较少,因此轮询较少。我经常在有很多更新的时候进行投票。当没有或更少的新更新时,我轮询的频率会降低。

    • 最后,我会发送多个更新,并注明它们发生的时间。假设玩家x移动到5,5,然后攻击某人并移动到5,8。这将是三个不同的事件在一次民意测验中出现。前端将负责以对用户有意义的方式显示这些随时间的变化。

    我认为这不是最终的解决办法。这更多的是关于如何更好地处理轮询方面的建议。

        3
  •  0
  •   user79854 user79854    17 年前

    如果你想让某些东西实时做出反应,那么轮询是不行的。您需要通过长时间运行的http连接或其他方式使用某种持久连接。(彗星)

        4
  •  0
  •   SpliFF    17 年前

    HTTP中的持久连接/轮询可能很棘手,正如您所指出的那样,效率也不高。我建议迁移到支持服务器推送消息的基于插件的游戏。大概 Unity

    如果你真的想坚持使用HTML,一个混合的解决方案可能会起作用,通过插件传递消息并在响应上重写DOM。