我正在开发一款多人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)。
首先,你说你没有推送太多数据。对我来说,你在拉。这与您可能知道的不完全相同。
您可以使用 Websockets、长轮询或服务器发送的事件。(阅读这篇文章)
从您到目前为止所说,尚不清楚 CPU 是否会成为您的瓶颈,但这里有一些建议可以帮助您节省服务器资源。
请考虑使用 WebSocket 而不是 AJAX 轮询。 通过转向更面向推送的架构,这可以消除为毫无意义的"没有任何变化"请求提供服务的大量开销。
您可能还希望使用memcached或其他基于RAM的数据存储层(例如Redis)来避免数据库瓶颈。