2012-08-10 87 views
4

我正在嘗試使用Node和Socket IO的多人賽車遊戲,表達。所以我試過簡單的例子來看看節點服務器和客戶端之間的延遲。 我在客戶端有一個可拖動的圖像。當我將圖像引擎代碼heren移動到一個客戶端時,它必須移動到所有客戶端。 所以基本上當我移動圖像時,我將圖像位置以json格式發送到節點服務器,然後從那裏向所有客戶端廣播。從那時起大約有300毫秒的延遲。以下是結果。使用Nodejs和套接字IO的多人遊戲遊戲

客戶端1在將數據發送到服務器:286136(時間戳) 服務器接收到的:286479 Client4在接收到的數據:286470 Client3在接收到的數據:286271

客戶機2在接收到的數據286487 客戶機程序接收到的數據at:286520

從client1移動到client5的延遲時間爲384ms。它太高的賽車遊戲.. 這裏是我的服務器代碼。

var app = require('express').createServer(); 
var io = require('socket.io'); 
var http = require('http'); 
var http_server = http.createServer(); 
var server = http.createServer(app); 
server.listen(3000); 

var socket = io.listen(server,{ log: false }); 

socket.sockets.on('connection', function (client) {  
    client.on('message', function (data){ 
     console.log("data arrived to server",new Date().getTime()); 
// Below both statements are giving same latency between the client 1 and client 5 
     client.broadcast.emit('message',data);  
     //socket.sockets.emit('message',data); 
    }); 
}); 

1)有什麼辦法來優化服務器代碼,以減少延遲?
2)這是使用節點和websockets的預期延遲嗎?
3)是socket io不能異步地廣播數據(我的意思是同一時間)?

感謝 Kishorevarma

+0

你爲什麼不跟Reddwarfserver.org做演示? – felipe 2012-08-10 17:01:45

+1

你使用什麼瀏覽器?這可能是由於使用不支持websocket的瀏覽器。這會增加大量的延遲。另外我猜你沒有在本地運行你的服務器。您應該對服務器運行常規ping,並查看有多少延遲是純網絡。 – travis 2012-08-10 17:37:09

回答

3

我已經創建了幾個實時這樣的比賽。其中一個是多人遊戲Asteroids(每個人都在拍攝小行星,合作遊戲)。 我有很好的響應時間 - 但是,我不是「垃圾郵件」所有客戶端數據太多 - 這可能是一個問題。我以每秒30幀的速度在服務器上處理物理數據,客戶端運行速度爲60 fps。 它只適用於所有客戶端都是Chrome的(所以他們有網絡套接字)。今天的大多數瀏覽器都支持Web套接字。 我會檢查確保你先插座。其次,我不會向所有客戶端發送太多數據:一種方法是以已知速率(例如每秒30幀)在服務器上處理物理數據。此外,正在處理客戶端上的物理。將最終用戶更改發送到30 fps邊界上的所有客戶端(不是在獲取數據時)。 小行星,這意味着: 每個客戶端和服務器知道以下幾點:

  1. 如果每一個球員,船舶,一切有關船舶(面向方向,流動方向,如果升壓是打開還是關閉)
  2. 如果每個子彈(位置,方向,速度,誰開的話)
  3. 如果每個小行星(位置,方向,速度)
  4. 30次,運行物理,重繪屏幕

Now ...

  1. 當客戶給你一個要求(比如,旋轉我的船到 右) - 客戶端發送數據到服務器(和不 處理在本地)
  2. 當服務器獲得用戶請求時,它排隊請求後成爲 處理下一個「嘀」
  3. 服務器蜱(30次):進程的所有排隊事件:
  4. 開啓可旋轉的船舶的請求:其實旋轉船。廣播 將數據發送給所有人(位置,面向方向,速度...)
  5. 當客戶端從服務器獲取更新事件時,它會引發新的 「將數據從服務器」更正爲其本地空間。 注意:如果客戶端無法以30 fps的速度處理所有數據,那麼當發送數據時,船舶將「跳轉」到正確的位置。
+0

非常感謝,有趣的閱讀 – 2015-06-02 13:22:55