PHP,MySQL,Memcache / Ajax扩展问题

时间:2011-01-16 03:45:03

标签: php mysql memcached

我正在用PHP / MySQL构建一个ajax tic tac toe游戏。 游戏的前提是能够与你的朋友分享像mygame.com/123这样的网址,你可以同时玩多个游戏。

我设置的方式是在用户查看游戏板空间时,每隔3秒调用一次文件(reload.php)。这个reload.php构建了他们的游戏板,输出(html)取代了他们当前的游戏板(从而显示了轮到他们的游戏)

最初我用PHP / MySQL完全构建它并且没有缓存。一位朋友给了我一个建议,尝试通过内存缓存(存储移动和ID匹配)完成所有临时/快速读取信息,然后根据这些信息构建游戏板。

我的问题是,当大约有30-40个活跃用户并且大约有40-50个游戏在运行时,两种解决方案都会遇到障碍。

它在VPS.net的VPS上运行,有2个节点。 (专用CPU:1.2GHz,RAM:752MB)

每次调用reload.php都会执行3次选择和2次插入查询。提取的数据大小可以忽略不计。在index.php上也会发生相同的操作,以便为初次访问构建电路板。

现在已经完成了背景故事,我的问题是:

每个用户每3秒轮询一次同一个文件以重建他们的游戏板是否存在瓶颈,并且所有用户都坐在index.php上,在HTML中调用AJAX。

如果是这样,是否可以将用户的呼叫分散到指定用于构建游戏板的一组文件(例如reload1.php 2,3等)并将用户引导到适当的文件。这会减轻压力吗?

冗长的解释;但是,我没有其他地方可以问。

非常感谢任何见解。

2 个答案:

答案 0 :(得分:1)

使用套接字服务器共享活动游戏信息,PHP& MySQL实际上不应该用于维护活跃的游戏会话。

socket服务器的一个开源示例是red5,如果你不介意支付一点,那么我会推荐Smartfox。

如果您只是将它用于客户端之间的基本通信,那么设置自己的套接字服务器也不是很困难。

答案 1 :(得分:-1)

每个游戏都有自己的文件。例如,459675.html或.txt或.json或w / e 这个文件可以是一个html页面,或者你需要传达当前游戏状态的任何内容。

客户端在Web服务器上轮询最新版本的文件。网络服务器就像一个很好的小型网络服务器,从磁盘上非常有效地提供这个文件,因为它不需要做任何脚本语言垃圾来处理请求。

当客户端进行移动时,它会向脚本发送请求。脚本重写文件...重复。

您的网络服务器可能已配置为发送静态文件的最后修改标头。您的客户端(浏览器)已经知道如何在给出最后修改的标头时执行条件http请求。因此,只需很少的工作就可以提高效率。