0

我正在编写一个基于浏览器的游戏。客户端使用 jQuery,服务器使用 PHP/MySQL。

这是一款回合制游戏,所以大部分客户端与服务器的通信都是通过调用-响应(jQuery-PHP)来实现的。每当用户单击按钮或任何其他活动元素时,都会发生该调用。在 JQuery 中调用后,PHP 控制器创建一些类,连接到数据库并返回响应。这种沟通对我来说非常好,不会导致连接数等问题(它类似于使用网站期间的标准流量)。

不幸的是,我还需要一些来自服务器端的“调用”。该示例是要加入的活动游戏列表。游戏列表更改时必须通知客户。最大延迟不超过 1 秒。

现在我通过从客户端(jQuery)和服务器发送“无”的“ping”调用来实现它,或者“game2 created”等。但是每个玩家每秒都会发送“ping”。对于它们中的每一个,服务器将创建类并连接到导致“数据库连接错误”的 mysql。

有什么方法可以最小化 mysql 连接和/或 ajax 调用?我使用标准的 www 服务器,没有 root 帐户。

4

2 回答 2

1

从这个开始:

But that 'pings' will be send every second from each of the players

而不是两个玩家都调用every second服务器(实际上是 2 个调用,每个连接的玩家的数量都会增加),您可以通过检查 ;idle time或经过的时间来优化它doing nothing。如果 2 次连续调用没有返回任何内容,则应将调用延迟增加到2 秒,然后再增加到4 秒等(只需使用setInterval并使其连续运行);这将允许您的应用程序呼吸(我有自己的游戏使用它)

接下来要做的是调用策略;不用在玩家的命令中调用服务器,您可以将玩家的命令存储在一个 js 数组中,每 X 秒发送一次该数组;如果没有命令,则没有 ajax 调用。是的,您会遇到延迟,但请考虑许多用户连接到可能较差的服务器...

如果您想进一步推动事情,您也可以使用彗星技术。

于 2012-06-05T11:29:59.603 回答
0

话虽如此,这可能是 eggyal 提到的可能重复..

关于 ping 和响应(客户端 ping 服务器场景)

1)您是否考虑过编写临时文件(即缓存时间为 X 的 Smarty 编译文件)?一旦玩家 Y 完成它的操作,删除文件(或在该文件中写入一些内容)。

每个玩家使用 game_id(或任何唯一的)执行 AJAX 请求,这将检查该编译文件的存在。这将为您节省许多 mysql 调用。如果文件的缓存时间已过期,您将调用 mysql。

2)丑陋->尝试mysql持久连接是否有帮助(我不确定)

于 2012-06-05T11:29:38.747 回答