gpt4 book ai didi

php - 服务器上有多少个类的实例?

转载 作者:可可西里 更新时间:2023-11-01 14:03:49 27 4
gpt4 key购买 nike

是否有可能知道整个服务器上一个PHP类有多少个实例对象(对于所有用户,而不仅仅是一个线程)。

这就是我想要这样做的原因。我正在制作一个纸牌游戏,我想要房间类(具有唯一的房间名称,房间内在线的玩家,锁定的 id ...)所以当一些用户加入服务器以获得新的事件房间列表时。当一个房间被取消(销毁)时,我会向所有用户发送该信息(基本上是实时房间状态)。


好的,这就是我想要这样做的原因。我正在制作纸牌游戏项目,我想要 Room 类(具有唯一的房间名称,玩家目前在房间内在线,socked id ...)所以当一些用户加入服务器以获得新的事件房间列表时。当一个房间被取消(销毁)时,我会向所有用户发送该信息(基本上是实时房间状态)。我希望你明白我想做什么。

最佳答案

你想实现一个多用户游戏,所以你应该使用一个客户端-服务器架构:设置一个单一的、持久的服务器进程运行在您的机器并跟踪游戏状态。每个用户请求都由一个 PHP“客户端”脚本处理,该脚本与游戏服务器对话并询问所有必要的信息。

这样,所有的 Room 对象和所有的玩家状态都存在于一个进程中:服务器。网络服务器(不要与您的游戏服务器混淆)启动客户端线程,它们以您想要的任何方式与游戏服务器异步通信。

如果您的情况真的很简单,您可以用一个集中式数据库替换服务器进程,该数据库存储游戏当前状态的快照(包括事件房间和相关玩家的完整列表)。每个用户请求从数据库加载游戏状态,并写出任何更改。但我认为长期运行的服务器是更简单的方法。

编辑:您的问题表明您对 PHP 的工作原理有些困惑。服务器启动的用于处理用户请求的 PHP 线程是非常短暂的。假设您有 5 名玩家已经玩了一个小时。每隔几分钟或几秒钟,玩家就会向您的网络服务器发送一个请求。服务器启动一个 PHP 线程来处理请求并退出。游戏可能会持续几个小时,但大部分时间没有正在运行的线程,也没有您的类的实例可以计数。在任何时候,你会有一些没有事件连接的玩家。因此,您需要某种持久实体来在请求之间保持它们的游戏状态,您还不如让它独一无二。

编辑 2: 既然你似乎有点不知所措,也许你应该选择第二个选项:忘掉进程间通信,让游戏状态保持在数据库:

每个 php 请求都是一个玩家操作。当用户点击按钮或其他任何东西时,您的 PHP 脚本会从数据库加载它需要的所有信息,以模拟游戏的当前状态。它会进行任何必要的清理工作(停用很久以前停止玩游戏的任何用户),然后处理用户的操作,将所有更改保存到数据库,并为用户生成一个新页面。然后它退出。这一切只需要几分之一秒。然后下一个用户(或同一用户)提交另一个操作,然后您重新开始。

并发性如何?除非您设法获得大量用户并且您的脚本真的很慢,否则不会有任何用户:您只会运行一个一次复制脚本。如果您想禁止并发执行,请使用数据库事务来确保一次处理一个用户操作。如果这还不够,请了解客户端-服务器架构、进程间通信以及客户端-服务器解决方案所需的所有其他内容。

关于php - 服务器上有多少个类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15166140/

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