2013-07-29 89 views
1

我在node.js上做了一個遊戲並上傳了它..它應該是每秒30 - 60幀..
現在我測試它,它運行緩慢..我的意思是本地網絡運行很多順利
用node.js上傳一個多人遊戲

服務器不是很遠..所以,任何提示如何使fps更好?

什麼是更好的xhr-poolingwebsockets,有什麼更快?
遊戲設置與XHR-池這樣的 -

io.set('transports', ['xhr-polling']); 

遊戲中appfog

如果需要的話,我可以張貼的遊戲鏈接主辦!

回答

3

這裏的問題是你在做什麼?如果服務器每幀發送一條消息給客戶端,那麼你所說的基本上是不可能的 - 網絡延遲低於16ms(60fps)或33ms(30fps)通過互聯網不可能得到可靠的保證。它可能通過本地網絡工作,幾乎可以肯定可以在本地機器上工作,但不能通過互聯網工作。如果您需要從客戶端獲取信息到服務器,並返回到下一幀,則往返延遲時間必須很短,包括雙方的處理。由於xhr輪詢和websocket都使用TCP,因此它會變得更糟,因爲一個緩慢/丟失的數據包會暫停一切,直到它最終顯示出來。

您確實需要儘可能地將渲染與服務器分離,以便在瀏覽器中製作可行的遊戲。網絡速度不夠快。

+0

那我該怎麼辦?遊戲循環應該在客戶端而不是服務器中?但隨後人們可以輕鬆地使用黑客。 – Israelg99

+0

關鍵是要讓服務器保持「官方狀態」。例如,我幫助bazookaguys.com工作(它只是被扔在一起,但足以)。如果有人點擊右箭頭,客戶端會告訴服務器他們正在移動,客戶端將開始動畫。如果服務器稍後告訴客戶該用戶應該在別的地方,他們會跳到那個位置。客戶端的行爲好像是權威的,但如果服務器出錯,可以通過服務器進行糾正。我們並不擔心欺詐行爲,所以我們確實在客戶端進行了檢測,並且發現了很多bug ... – korvus

+0

一個很好的例子就是看[流星框架](http://www.meteor.com) )做延遲補償。如果您更改客戶端中的服務器端數據,則客戶端的行爲就像數據已更改,直到服務器確認或拒絕爲止。這讓用戶感覺很快,同時仍然讓服務器成爲權威。 – korvus