gpt4 book ai didi

php - PHP:游戏循环(线程或排序)

转载 作者:行者123 更新时间:2023-12-03 12:01:35 25 4
gpt4 key购买 nike

我正在编写PHP代码以成为游戏客户端。它使用套接字;先创建socket_create,然后再创建socket_connect,然后再创建socket_read。它工作正常,但是问题在于服务器可以随时发送数据包,这意味着socket_read必须在“游戏循环”中不断发生。所以像这样:

<?php 
$reply = "";
do {
$recv = "";
$recv = socket_read($socket, '1400');
if($recv != "") {
$reply .= $recv;
}
} while($recv != "");

echo($reply);
?>

不起作用,因为它卡在了循环中(服务器直到客户端退出游戏才终止连接),并且PHP代码需要处理传入的数据包。

因此,PHP实际上没有线程。处理此问题的最佳方法是什么?

最佳答案

基本上,任何软件平台都可以解决这个问题。如您所知,大多数情况都是通过线程解决的。虽然在PHP中可以进行线程化。它需要MAJORHAXXX。例如从php内部启动命令行php线程。

最终并没有达到理想。

但是,还有其他方法可以解决此问题。

但是您需要首先检查此列表上的所有标记:

[]-我的游戏不需要不断检查服务器,例如查看玩家的位置或复杂的 Action 。超出聊天室级别的数据传输和更新速率的任何内容均应取消选中此框。

[]-服务器不需要告知我的游戏。客户要求它所需要的任何东西是完全可以接受的,也许是每秒一次,或者最好是每分钟一次。

[]-我的游戏不需要对服务器上运行的复杂世界进行持续不断的仿真,而无需花费更长的时间来完成请求。跟踪聊天是一回事,进行物理和图形修改是另一回事。

如果您选中了所有这些框,则PHP仍然处于游戏状态!否则。不要打扰

基本上,我在这里所说的是,PHP非常适合不是真正的多人游戏,基于回合的游戏,或者至少不是很互动的游戏。但是一旦您不得不在没有播放器的情况下继续运转,PHP就会浮出水面。

巫毒水平

但是,如果您只是必须这样做。有一些方法可以解决它。

A-创建一个运行您的世界的PHP守护程序,将所有其他流量传递给与数据库交互的getter或setter请求文件。因此,您可能要求获取游戏世界状态,或设置玩家执行的值。所有其他与游戏世界相关的事情都可以由守护程序处理,并且游戏本身在数据库中进行。

B-使用cron,而不是Daemon。 (危险,但是我们已经确定您是冒险者,对吧?)

C-仅尝试守护程序并监听套接字,然后发送线程(通过exec())进行响应。就像上面的AndreKR的想法一样,只有您不需要 sleep 。这里的问题是,您几乎总是会丢失任何东西或以其他方式被切断。如果守护进程以某种方式运行两次,整个事情可能会爆炸。

关于php - PHP:游戏循环(线程或排序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4315549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com