PHP AJAX多人游戏

时间:2011-07-23 19:23:33

标签: php ajax sockets multiplayer

我正计划一个相对简单的在线多人游戏,我很难理解玩家与玩家之间的交流。

游戏详情:

  • 6名玩家
  • 聊天框
  • 30秒(间歇)
  • 时间同步很重要

玩家选择并采取行动,在回合结束时,执行动作,有一个简短的间歇,以详细说明行动并开始新一轮。

我决定用JS和PHP(当然是AJAX)完全构建这个游戏。我只是不知道我应该使用什么来进行客户端与客户端的通信 - 我最初计划使用mySQL对PHP脚本进行持续1/2秒的AJAX调用来存储游戏/用户数据,但我担心会太慢,不可预测。

我考虑使用像XML而不是mySQL这样的东西,并使用类似php fopen()函数的东西 - 你们怎么看待它?

我在这个问题here中读到,海报正在考虑使用XMPP,这可能是一个很好的解决方案吗?

我应该去插座吗?对于不需要交换太多数据的游戏来说,这是必要的吗?要做到这一点需要什么?

有关同步回合时间的任何建议吗?或者这是我真正需要关注的事情吗?

我对所有建议持开放态度,非常感谢我能得到的任何帮助。

3 个答案:

答案 0 :(得分:2)

如果您决定使用PHP / JS / Ajax,那么我建议您阅读有关使用PHP usleep()函数延迟返回ajax调用结果的信息,直到服务器有话要说。这应该可以使服务器到客户端的通信速度更快。

我自己没有这样做,但我认为基本原则是每次ajax调用可以延迟5到10秒,每次超时或从服务器返回数据时执行新的调用。

另外,我建议使用javascript框架(例如jQuery)来使ajax调用更易于管理。

答案 1 :(得分:2)

去彗星,你不需要插座。 Comet是一种反向AJAX。例如,因为它将数据推送到浏览器而浏览器不需要经常轮询服务器,因此可以完美地用于p2p之类的东西,例如即时通讯工具。 Comet in JS / PHP有很多实现,只有谷歌。然后,作为后端,你可以使用MySQL或XML或任何你想要的(但我会认为MySQL是一个更好的解决方案,因为XML只是一个文本文件,需要打开,读取,写入和关闭,数据库设计比那更快。)

答案 2 :(得分:1)

我也正在使用JS / PHP构建游戏,这是我的计划:在服务器上有一个纯文本文件。每当用户执行需要发送到服务器的操作时,它就会向XML脚本发送XMLHttpRequest,该脚本会将操作附加到文件中(例如,如果用户从迈阿密向莫斯科发射导弹,则会写入“启动迈阿密”莫斯科“到档案”。要检查其他人何时执行某些操作,请在不同的PHP脚本上打开XMLHttpRequest,并在PHP脚本返回某些内容时,记录它返回的内容并重新打开连接。该PHP脚本检查对文件的修改,并在文件内容发生更改时返回该文件内容。以下是检查更改的PHP文件:

<?php
#First, set infinite time limit
set_time_limit(0);
#record last modification time
$f1=filemtime('./nameoffile.txt');
#wait until the file changes
while($f1===filemtime('./nameoffile.txt'){
    #have a 10,000 microsecond break between each check so you do not use too much resources
    usleep(10000);
readfile('./nameoffile.txt');
?>

您可能还想查看HTML5 WebSockets。我不使用它们,也不知道它们是否适用于PHP,但它们看起来很有趣。