2014-09-30 77 views
1

我正在使用Socket.IO開發遊戲。我發現即使在本地主機上運行,​​延遲也非常高,即250毫秒。這是正常的嗎?Socket.IO中的高延遲

這裏是我使用來計算延遲代碼:

function startLatencyPoller(socket,callback) 
    { 
     setInterval(function() { 
     var startTime = Date.now(); 
     socket.emit('ping'); 
     socket.on('pong', function() { 
     latency = (Date.now() - startTime) /2; //round trip time/2 
     callback(latency); 
    }); 
}, 2000); 

} 

我的問題是其正常的Socket.IO有甚至在本地網絡以及是否有延遲高達250毫秒是進一步減少它的方法。

編輯: 我檢查了運輸,現在我使用websocket作爲運輸工具。

編輯: 問題已得到解決編輯代碼按照下面的答案後(除去聽者避免它們疊置):

setInterval(function() { 

    var startTime = 0; 
    var socketFunction = function() { 
     latency = (Date.now() - startTime) /2; //round trip time/2 
     callback(latency); 
     socket.removeListener('pong',socketFunction); 
    }; 

    socket.on('pong', socketFunction); 
    startTime = Date.now(); 
    socket.emit('ping'); 


}, 5000); 
+0

不,這不正常。很難說出原因可能在哪裏。如果在終端中使用普通ping,延遲是多少? – DerM 2014-09-30 15:02:51

+0

本地ping速度非常快,小於1 ms。我不知道如何診斷這一點。 – coderboy 2014-10-01 09:44:05

+0

即使我在同一臺機器上使用本地主機,我仍然運行到250毫秒。即使在同一網絡中的另一臺機器上點擊它,它的平均值也不會低於250毫秒。 – coderboy 2014-10-01 09:58:20

回答

2

沒有此功能的問題。如果你設置了一個socket.on這意味着你正在向同一個事件添加很多監聽器,並且這將會增加每次迭代的執行次數。所以首先,將該socket.on移到setinterval之外。你的代碼是不是也被阻塞了?假設你的cpu不會與其他東西一起運行,它可能是一些其他事件延遲它。

+0

非常感謝您的回答!你真正的MVP:D。我更新了我的問題,說明如何使用您的建議解決問題。 – coderboy 2014-10-09 10:12:16

+0

不用擔心。善於幫助 – Dslayer 2014-10-10 11:43:56

0
  1. 確保您在測試ping之前等待一秒左右,因爲初始連接套接字可能會堵塞系統資源,從而導致更長的ping時間。可能想添加一個計時器到您的ping檢查。
  2. 本地主機/開發環境應該有一些開銷ping,因爲它可能不是一個專用的網絡服務器。