2012-11-15 55 views
4

我的工作在一個多人HTML5遊戲,使得使用jQuery的輪詢遊戲狀態的服務器。目前,我每2000ms就會通過一個.ajax調用查詢服務器,以給出實時更新的印象。我真的不會通過...推動太多數據,主要是x/y位置和一些角色屬性......只有少數玩家在我的遊戲實例中活着。降低服務器CPU使用率與AJAX調用

服務器本身是一個共享託管服務器,我想盡量讓我的CPU命中率儘可能低,因爲我開發這款遊戲時(並將其轉移到未來更強大的功能) 。

這裏是我當前輪詢的方法對數據的服務器。任何和所有的建議是受歡迎的,因爲服務器加載對我來說是一個新的領域。

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

有一件事我應該提到的是,由於這是一個共享的服務器上,我不能有自由運行的進程打開(即Node.js的)連接。

回答

3

首先,你說,你是不是推太多的數據。對我而言,你在拉。這與你可能知道的不完全一樣。

你可以使用WebSockets,長輪詢或服務器發送的事件。 (Read this article

1

從你到目前爲止說,目前還不清楚該CPU將成爲您的瓶頸,但這裏有一些建議,可以幫助您節省服務器資源。

考慮使用WebSockets替代AJAX輪詢。這可以通過轉向更加面向推式的體系結構來消除大量無謂的「沒有任何改變」請求的開銷。

您也可能想要使用memcached或其他基於RAM的數據存儲層(例如Redis)以避免DB瓶頸。

+0

我不知道這將是一個'本身'的瓶頸,但是我可以看到如果我的CPU使用率一直在瘋漲,我的主機暫停了我的帳戶(我正在託管許多其他網站在這個帳戶)。 – espais