是否可以使用PHP和MySQL(1,000多名玩家)为iPhone制作mmorpg?我正在考虑使用MySQL来存储所有玩家信息(名称,用户名,通行证,位置,位置)。然后我会通过php访问该数据(将位置传递到php页面,它返回该区域的所有玩家信息)。 PHP和MySQL能够快速完成这样的事情吗?如果没有,后端会有什么其他解决方案?另外,VPS(http://www.linode.com/)是否足够快,还是应该使用专用服务器?
由于
答案 0 :(得分:3)
好。因为你 - 正如贾斯汀指出的那样 - 没有提到任何有关游戏规模如何的事情,这是一个棘手的问题。
但是,我对你问题的回答是'是'。 PHP和MySQL肯定能够运行这样的系统。更相关的问题是它是否是正确的选择 - 而这个问题的答案很可能不是正确的选择。
MMORPG通常是非常实时的,这意味着每个客户端将有几个请求/秒服务器。即使您使用保持活动的HTTP连接等,我相信使用非基于HTTP的方法可以获得更好的结果。
您当然可以使用PHP来处理请求,然后使用JSON或类似格式对它们进行格式化,并让客户端对该数据做出反应。然而,我会选择一种完全不同的编程语言,如C或类似的,因为MMORPG具有延迟要求。
我不是游戏专家或C专家,所以这些只是我的谦卑问题。
答案 1 :(得分:2)
很明显,这取决于你的游戏。它适用于1,000个用户吗?在一个盒子上?可能不是。在一个小集群?也许,如果你保持简单。然而,一旦它变得流行,你就已经在一个非常难以管理的平台上进行了投资。你会有规模的噩梦,与那些困扰大型网站的噩梦不同,但由于用户之间的互动性,这种噩梦更加困难。
即使是简单的回合制游戏(想想Facebook& Myspace应用程序)也会使用LAMP后端出现大规模问题......而且它们实际上还远远不够。
MySQL根本不足以处理事务负载(用于写入和复制)。几乎没有任何数据库。您需要将状态保持在RAM中,然后按计划批量处理。这种技术最终会碰壁,然后您需要将数据库拆分为完全隔离的集群。
让人们在孤立的数据岛上互相对抗变得困难,除非你非常有创意。这是memcached无法解决的问题。你可能也需要对它们进行分片。
流行的在线游戏在其后端使用自定义流媒体协议。如果它是由PHP驱动的话,魔兽世界根本就不存在。如果两个玩家每秒都需要访问您的网站以检索更新,则无法让两个玩家互相争斗。如果动作是动画的,那么滞后(最好)是不稳定的。您需要双向通信协议。
我强烈建议您查看分布式消息传递平台。甚至可能是为并行化而构建的语言。集群,就像Erlang一样。
答案 2 :(得分:1)
决定使用PHP / MySQL,使用像eAccelerator这样的东西来缓存和优化你的代码,并在CDN上安装你所有的静态内容(亚马逊S3,这应该会给你足够的速度。)
答案 3 :(得分:0)
我会说去吧。我见过几个由PHP / MySQL组合驱动的MMOG,它们跑得很快(有5万多个活跃玩家)。虽然你应该忘记使用共享主机(如果你甚至考虑它)(至少当游戏获得超过1000名玩家时)。
此外,您应该考虑使用一些缓存技术,如APC,并在db层中实现memcached支持。这会有很大的帮助。
如果你可以使用PHP(lighttpd),数据库和静态内容(图像,flash等)(nginx)的专用服务器,那就更好了。这将分配机器之间的负载,静态内容不会因为IO的可靠性而终止MySQL。