我正计划一个相对简单的在线多人游戏,我很难理解玩家与玩家之间的交流。
游戏详情:
玩家选择并采取行动,在回合结束时,执行动作,有一个简短的间歇,以详细说明行动并开始新一轮。
我决定用JS和PHP(当然是AJAX)完全构建这个游戏。我只是不知道我应该使用什么来进行客户端与客户端的通信 - 我最初计划使用mySQL对PHP脚本进行持续1/2秒的AJAX调用来存储游戏/用户数据,但我担心会太慢,不可预测。
我考虑使用像XML而不是mySQL这样的东西,并使用类似php fopen()函数的东西 - 你们怎么看待它?
我在这个问题here中读到,海报正在考虑使用XMPP,这可能是一个很好的解决方案吗?
我应该去插座吗?对于不需要交换太多数据的游戏来说,这是必要的吗?要做到这一点需要什么?
有关同步回合时间的任何建议吗?或者这是我真正需要关注的事情吗?
我对所有建议持开放态度,非常感谢我能得到的任何帮助。
答案 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,但它们看起来很有趣。