PHP AJAX多人游戏

PHP AJAX多人游戏,php,ajax,sockets,multiplayer,Php,Ajax,Sockets,Multiplayer,我正在计划一个相对简单的在线多人游戏,我不知道该用什么来进行玩家之间的交流 游戏详情: 6名球员 聊天室 30秒的间歇 时间同步很重要 玩家选择并采取行动,在回合结束时,执行行动,有一个简短的间歇来详细说明行动,新一轮开始 我决定完全用JS和PHP构建这个游戏,当然是AJAX。我只是不知道应该使用什么进行客户端到客户端的通信——我最初计划使用1/2秒的AJAX调用,使用mySQL存储游戏/用户数据的PHP脚本,但我担心这会太慢和不可预测 我考虑过用XML代替mySQL,使用php fopen函数

我正在计划一个相对简单的在线多人游戏,我不知道该用什么来进行玩家之间的交流

游戏详情:

6名球员 聊天室 30秒的间歇 时间同步很重要 玩家选择并采取行动,在回合结束时,执行行动,有一个简短的间歇来详细说明行动,新一轮开始

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

我考虑过用XML代替mySQL,使用php fopen函数——你们怎么看

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

我应该买个插座吗?对于一个不需要交换那么多数据的游戏来说,这是必要的吗?要让这一切顺利进行需要什么

有没有关于同步整轮时间的建议?或者这是我真正需要关心的事情


我愿意接受所有建议,非常感谢能得到的任何帮助。

如果您决定使用PHP/JS/Ajax,那么我建议您阅读有关使用PHP函数延迟返回Ajax调用结果的内容,直到服务器有话要说。这将导致更快的服务器到客户端通信

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


此外,我建议使用javascript框架,例如,使ajax调用更易于管理。

使用Comet,您不需要套接字。Comet是一种反向AJAX。例如,它非常适用于即时通讯(instant messenger)等p2p应用,因为它将数据推送到浏览器,而浏览器无需不断轮询服务器。Comet在JS/PHP中有很多实现,谷歌就是这样。然后,作为后端,您可以使用MySQL或XML或任何您想要的,但我会认为MySQL是更好的解决方案,因为XML只是一个需要打开、读取的文本文件。编写并关闭数据库,数据库的设计速度比这快。

我也在用JS/PHP构建一个游戏,我的计划是:在服务器上有一个纯文本文件。每当用户执行需要发送到服务器的操作时,它都会向php脚本发送一个XMLHttpRequest,该脚本会将该操作附加到文件中。例如,如果用户从迈阿密向莫斯科发射导弹,它会将launch Miami Moscow写入该文件。要检查其他人何时做了什么,可以在不同的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 WebSocket。我不使用它们,也不知道它们是否与PHP一起工作,但它们似乎很有趣。

谢谢,我会检查一下。是的,现在jQuery是一个给定的函数集,但出于性能考虑,我仍然可以选择自己的专用函数集,因为我可能不需要jQuery提供的所有功能。你认为XML对mySQL对???XML对mySQL怎么样?它们到底有什么关系??Re:DB vs XML-没有XML服务器,而DB本身就是一个服务器。这意味着访问XML文件时会出现死锁,与DB不同。这听起来和我想要的完全一样,但是,我正在考虑使用jQuery,似乎大多数人都在使用Dojo或prototype-有什么建议吗?@christian Sciberas yep,这是另一个缺点。我在2008年使用原型实现Comet。我想jQuery也做了类似的工作。我发现Comet扩展了jQuery来使用它,看起来这对我很有用。但我下一个关注点是处理多个游戏室——这需要不同的连接、端口等吗?有人知道吗?好吧,您可以为房间发送额外的ID,它们可以通过PHP脚本进行管理并存储在DB中。然后,您只需将相关ID推送到使用该ID连接到脚本的相关客户端。当然,这还不够安全,但我猜有很多会话、cookie、令牌等选项。WebSocket可以与PHP一起使用,但许多主机不允许您打开端口,因此不允许使用WebSocket。Websocket可以更好地减少延迟,许多游戏都喜欢使用WS