php - 实时战略游戏如何在 PHP 中运行?

标签 php database mmo

Travian 或 oGame 等一些 MMO 实时策略游戏是用 PHP 编码的。

您能否简要介绍一下此类游戏的幕后工作原理?游戏如何在没有玩家请求的情况下进行实时数据库更新?

此外,在运行 Travian 等具有 1000 名活跃玩家的 RTS 游戏时,人们需要什么样的服务器负载/带宽?

最佳答案

尽管这个话题相当陈旧,但我确实认为我对你的问题还有一个“更好”的答案(如果我自己可以这么说的话)然后是含糊的“更新由 cronjobs 完成”的答案。

Travian 即通过使用 javascript 让您产生实时的错觉。后面实际发生的事情如下:

玩家 A 向玩家 B 发送攻击。在 MySQL 数据库中,这被记录为到达时间戳。每当玩家 A 更改或刷新页面时,都会启动一个脚本(通过使用包含)来检查与该玩家有关的任何事件(增援到达、攻击到达目标等)。该脚本显然会检查当前时间并查看时间戳小于当前时间的所有事件。这意味着应该采取行动。就在那一刻,操作实际上得到了处理。

这也意味着如果玩家 A 和玩家 B 都没有再次登录,则永远不会计算攻击,除非其他人也攻击玩家 B - 然后玩家 B 和攻击玩家的所有事件都将被处理。

关于php - 实时战略游戏如何在 PHP 中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9469870/

相关文章:

java - Android studio 应用程序未将数据保存到数据库并发送确认电子邮件

php - htaccess - 可以阻止目录查看,但文件仍然可以直接查看

java - MMORPG 中客户端/服务器之间的消息速率

sql - 如何为一对多关系开发数据库模式?

networking - 有没有办法在不加密的情况下避免 MITM 攻击?

save - 在 MMO 中保存数据

javascript - 为什么我的新闻通讯表单在 Amazon CloudFront 上不起作用?

php - 为什么我只能在使用之前 dump() 时才能到达日期对象?

sql - 需要一个 sql 查询来按评论数/计数 DESC 查找评论最多的帖子

php - 如果 id 为 ='3',则始终位于底部(在 MySQL 中使用 `ORDER BY`)