在http请求中进行大量的php操作,真实吗? (创建大量对象等)

时间:2011-02-07 23:08:17

标签: php

我开发了一个棋盘游戏应用程序(用于android / iphone)并添加了一个多人游戏组件。正在考虑使用app engine(java)作为后端,所以实现了这种方式,但结果显示cpu成本可能会过高(app引擎可能不是这类应用的最佳选择)。

我对php的性能没有多少经验,我想知道是否有人可以给我一个想法,如果我正在走向一条糟糕的道路,将其转换为php。基本步骤是:

  1. Http请求发送到我的服务器,玩家正在尝试执行移动(这是一个回合制游戏)。
  2. 从数据库中获取游戏状态。这可能会存储为一个扁平的json字符串(没有必要为游戏状态创建一个模式)。
  3. 将json字符串反序列化为可用的游戏状态对象(如房屋,汽车等)。
  4. 最后进行游戏状态操作(比如将玩家的汽车移到新房等)。
  5. 序列化已修改的游戏状态,并保留回数据库。
  6. 将json响应发送回播放器,其中包含更新的游戏状态。
  7. 我不知道在单个http操作的上下文中是否需要做很多工作。一些数字:

    1. 期望在任何特定时间使用该服务的约500名玩家。
    2. 每个游戏只包含2到8名玩家,每个游戏都是完全独立的。
    3. json gamestate对象在序列化时大小约为25k。
    4. json gamestate对象必须反序列化大约300个对象才能恢复游戏的完整状态(房屋,汽车等)。
    5. 这是不现实的吗?我认为最好的解决方案是获得一个专用服务器,并将所有游戏状态留在内存中,但我现在正试图通过一些共享主机平台。这意味着我必须继续往返于数据库以获得游戏状态,反序列化和序列化。

      感谢您的任何想法

3 个答案:

答案 0 :(得分:1)

如前所述,任何认真的托管公司都可以轻松应对流量。我只是想提几点:

您确定要每次来回发送整个游戏状态吗?你应该能够只发送改变后的东西...这当然在很大程度上取决于你的游戏是如何运作的。

您可能需要考虑的唯一其他问题是延迟:服务器请求可以轻松地花费一秒或更多时间来完成整个编码/发送/等待/接收/解码过程。现在,如果你的游戏是回合制的,这可能不是一个主要的障碍,但总是要记住(也想到那些连接速度慢的人,即没有3G覆盖)。

无论如何,你现在看起来很不错。如果我是你,我会去写几个测试来看看它是怎么回事。除此之外,祝你好运! ; - )

答案 1 :(得分:0)

我很确定共享主机可以应对这种流量,根据我的经验,大多数共享主机上的网站几乎没有任何流量

如你所说,你可以使用memcache或类似的东西,如果你想沿着那条轨道前进,那里有很多便宜的vps选项。

我会首先让它运行并让500人玩,然后当它成为一个问题然后处理它。没有必要对抗尚未开始的火灾

答案 2 :(得分:0)

听起来不错。如果您要存储json,可能需要考虑使用NoSQL数据库(如MongoDB),但这可能无法在共享主机上使用。