是否所有的php脚本,即使在不同的iFrame中运行,都是一个接一个地滚动的,或者它们可以同时发生?

是否所有的php脚本,即使在不同的iFrame中运行,都是一个接一个地滚动的,或者它们可以同时发生?,php,iframe,scripting,simultaneous,Php,Iframe,Scripting,Simultaneous,我正在用php编写一个类似炉石的纸牌游戏(我知道,这根本不适合,但我只是喜欢挑战性的任务,(好吧,这是我唯一熟悉的语言)) 没有flash,因此board.php(万恶之源)包含200多个可视iFrame(这是为了让图形刷新不会覆盖整个屏幕,而仅仅是一张卡上的健康刷新)以及4个不可见iFrame,它们都有自己的特定任务:a-chat_刷新器(检查传入的聊天信息和朋友请求),B-game_refresh(每X秒刷新一次(玩家设置值)):仅执行发送到DB表的任何内容,该DB表包含有关所需图形刷新的信

我正在用php编写一个类似炉石的纸牌游戏(我知道,这根本不适合,但我只是喜欢挑战性的任务,(好吧,这是我唯一熟悉的语言))

没有flash,因此board.php(万恶之源)包含200多个可视iFrame(这是为了让图形刷新不会覆盖整个屏幕,而仅仅是一张卡上的健康刷新)以及4个不可见iFrame,它们都有自己的特定任务:a-chat_刷新器(检查传入的聊天信息和朋友请求),B-game_refresh(每X秒刷新一次(玩家设置值)):仅执行发送到DB表的任何内容,该DB表包含有关所需图形刷新的信息-要刷新的帧,并将一组GET参数附加到帧的url)、C-move_evaluator(生成用户拖放的结果)和D-instant_executer(负责一次滚动一个由事件>实例>子实例触发的全局实例)

基本上,如果你不想在另一组全局事件/瞬间-瞬间-子瞬间滚动时触发,我必须保留多个“瞬间”或动作。这包括永远不要在同一滚动片段中调用多个包含事件的函数,除非我滚动while$\u会话[“阶段”]=“EndOfTurnEffects”(睡眠(1)(发生在脚本A中);根据我的意愿,它应该一直休眠到$_会话[“阶段”]=“待机”(轮到其他玩家),我希望脚本B进入mofity$_会话[“阶段”]。基本上,如果脚本B在脚本A执行完毕之前不运行,我就会陷入while语句的无休止循环中


实际上,我可能会自己测试一下,但我认为其他人对这件事的参与可能也会帮助其他人……

抛开对你想做什么和如何做的看法:

您可以在配置和/或资源允许的情况下打开任意多个并发请求,但一次只能有一个PHP进程打开给定的会话文件试图打开该会话的所有其他连接都将被阻塞,直到会话关闭,并且每个阻塞会话都将占用Apache/Nginx/etc中的一个工作进程插槽

也就是说,每个用户有200多个自动刷新iFrame,而我想象的是每个游戏有2个以上的用户,你将有如此多的开放请求相互阻塞,以至于你将迅速压倒你的服务器,你的用户体验将……糟糕

你绝对应该重新考虑你的设计和方法。最明显的是,200多个iFrame仅仅代表一个游戏板是过火了。使用Javascript和AJAX/XHR来管理游戏客户端的部分还将改善用户体验,减少服务器负载,并在现代web应用开发中培养有价值的技能


我比大多数人更喜欢PHP,也更鄙视JS,但如果你想在互联网上开发酷的应用程序,就离不开它。

这看起来不像是PHP的问题或PHP可以解决的问题。你可能需要Javascript/Ajax组合来更新单独的iFrame。Move evaluator主要是通过填充$onLoad来驱动PHP的Javascript到末尾的body标记(它是不可见的)。每当用户拖动可拖动的内容并将其放到可拖放的目标上时,就会调用它。Php也会简单地在db表中删除行,其中包含列“frame”(要刷新)“script_to_invoke”,“side”(本地或其他客户端(是的,这里是双倍的客户端服务器))由刷新器执行,这是根据用户设置实际刷新每个0.3到2秒的唯一帧)。老实说,与处理连锁反应相比,这个模型非常简单……当然,javascript也有一部分功能:move evaluator在处理输出内容(错误消息、手对板、手对板、攻击等)后,主要处理传递给body标记的$onLoad变量。这是一系列复杂的事件……200帧并非都是自动刷新的,这会使我的廉价服务器崩溃……只有1个脚本反复加载,并检查数据库中的刷新行(表中有4列:target_frame、script_to_invoke、side、job_id).一卷很少会刷新超过5帧…不过,谢谢