使用AJAX调用降低服务器CPU使用率

5

我正在开发一款多人在线HTML5游戏,利用jQuery轮询服务器以获取游戏状态。目前,我每2000毫秒使用.ajax调用查询服务器,以给人实时更新的印象。我没有传递太多数据...主要只有x/y位置和一些角色属性...在我的游戏实例中只有几个玩家存活。

服务器本身是一个共享托管服务器,我想尽可能地降低CPU负载,因为我正在开发这个游戏(并将其移到稍微高功率的设备上)。

这是我目前轮询服务器数据的方法。欢迎任何建议,因为服务器负载对我来说是一个比较新的领域。

$.ajax({
  type:'GET',
  url:"controller.php?a=player-info",
  dataType:'json',
  success: function(data){
    //parse data
  }
});
....
setInterval(getPlayerInfo,2000);

需要注意的一点是,由于这是在共享服务器上进行操作,我不能运行自由进程来打开连接(例如Node.js)。

2个回答

3

首先,你说你没有推送太多数据。对我而言,你是在拉取数据。这与你可能知道的不完全相同。

你可以使用Websockets、长轮询或服务器发送事件。(阅读本文


1

从你目前所说的来看,CPU不会成为你的瓶颈,但以下是一些建议,可以帮助你节省服务器资源。

考虑使用WebSockets而不是AJAX轮询。这可能通过转向更加推动式的架构来消除服务无意义的“没有变化”的请求的大量开销。

您还可能需要使用memcached或其他基于RAM的数据存储层(例如Redis)以避免DB瓶颈。


我不确定这会不会成为一个瓶颈,但是如果我的 CPU 使用率持续飙升的话(我在此帐户上托管了许多其他网站),我可以看到我的主机可能会暂停我的帐户。 - erik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接