Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
游戏机制-如何在所有玩家离线时仍在后台运行PHP脚本?_Php_Ajax_Connection_Client Server_Background Process - Fatal编程技术网

游戏机制-如何在所有玩家离线时仍在后台运行PHP脚本?

游戏机制-如何在所有玩家离线时仍在后台运行PHP脚本?,php,ajax,connection,client-server,background-process,Php,Ajax,Connection,Client Server,Background Process,我正在尝试创建一个多玩家、PHP+JS支持的纸牌游戏(2-6名玩家) 当一个玩家从他/她的手上选择一张牌时,我会通过更新然后使用数据库/文件检索细节(还没有决定是哪一张,但这不是问题所在)将该信息传递给其他玩家 如果轮到玩家选择一张牌,而他们没有选择,系统会选择其中一张牌并为他们放弃。无论是手动选择还是系统选择,都使用了相同的机制,即使用一个中央数据库/文件来更新其他用户的接口。只要调用AJAX来更新数据库,一切都很好 但如果任何玩家失去连接或关闭浏览器,轮到他们的时候就不会有新的AJAX调用了

我正在尝试创建一个多玩家、PHP+JS支持的纸牌游戏(2-6名玩家)

当一个玩家从他/她的手上选择一张牌时,我会通过更新然后使用数据库/文件检索细节(还没有决定是哪一张,但这不是问题所在)将该信息传递给其他玩家

如果轮到玩家选择一张牌,而他们没有选择,系统会选择其中一张牌并为他们放弃。无论是手动选择还是系统选择,都使用了相同的机制,即使用一个中央数据库/文件来更新其他用户的接口。只要调用AJAX来更新数据库,一切都很好

但如果任何玩家失去连接或关闭浏览器,轮到他们的时候就不会有新的AJAX调用了。即使这样,也可以通过从其他玩家的脚本中进行轮询来管理(请告诉我是否有更好、更有效的方法来实现这一点,但这不是我的主要问题)

如果所有玩家都失去了连接,那么他们中的任何一个都不会调用AJAX,游戏也会“陷入昏迷”:没有客户端调用管理游戏的PHP脚本,这意味着游戏中不会再发生任何事情。没有新的轮次,没有自动选卡

那么,有没有一种方法可以让PHP脚本保持活动状态(模拟玩家输入直到游戏逻辑结束),即使所有玩家都离线了?


回答一个可能的问题:如果没有解决方案或解决办法,我可以接受,如果所有玩家都退出,我可以让游戏处于暂停动画状态。我可能仍然会这样做,但我想知道是否有办法让游戏脚本一直运行到游戏结束(所有的牌都用完了)?

一个想法是在服务器端(Node.js?@DieterKräutl why nodeJS)执行机制,当PHP已经被使用时?总体来说,更好的方法是使用WebSocket而不是AJAX。您将知道客户端何时消失,因为websocket连接将关闭。我们已经考虑过websocket,但我想不出比AJAX(目前)有多少优势来保证管理websocket的额外复杂性。如果这完全破坏了多人游戏体验,我将重新考虑这个决定,但不是其他。如果您愿意使用替代技术堆栈,如ASP.NET Core和Signal,那么管理WebSocket的所有复杂性几乎都被抽象掉了。你可以在几分钟内起床跑步。相比之下,PHP的websocket实现大多不是很有用。(如果愿意,您甚至可以将Azure Signal与PHP集成,尽管它不如与ASP.NET应用程序结合使用那么无缝)。