2016-01-09 119 views
-1

尋找一些智慧。情景如下。 在聊天系統中,我有一系列連接的用戶。當新的訪問者連接時,我想通知陣列中的第一個用戶,如果1分鐘後沒有答案,移動通知第二個用戶等等。如果沒有用戶回答請求,我想循環回到數組的頂部。如果10分鐘後沒有答案,請終止通知循環。謝謝,javascript通知中心

這是一些相關的代碼。

socket.on('new_visitor', function (newVisitorData) { 
    for (var i = 0; i < users.length; i++) { 
     users[i][_id].emit('send_chat_request', newVisitorData, function(data){ 
      // the notification was sent 
     }); 
    }); 
}); 


socket.on('answered_request', function(data){ 
    //stop the notification loop 
}); 

回答

0

你可以嘗試這樣的代碼(我不能測試它,希望有任何錯誤,這是你正在尋找的邏輯):

function checkActiveUser(i, newVisitorData) { 
    users[i][_id].emit('send_chat_request', newVisitorData, function(data){ 
     clearInterval(clr); 
     clearTimeout(clr10); 
     // the notification was sent 
    }); 
} 

var countUser; 
var clr; 
var clr10; 
socket.on('new_visitor', function (newVisitorData) { 

    clearTimeout(clr10); 

    countUser = 0; 
    checkActiveUser(countUser, newVisitorData); // first check 

    clr = setInterval(function(){ 
     countUser++; 
     if (countUser==users.length) countUser=0; 
     checkActiveUser(countUser, newVisitorData); 
    }, 60000); // 1min 

    clr10 = setTimeout(function(){ 
     clearInterval(clr); 
     clearTimeout(clr10); 
    }, 600000); // 10min 
}); 


socket.on('answered_request', function(data){ 
    clearInterval(clr); 
    clearTimeout(clr10); 
    //stop the notification loop 
}); 
+0

感謝您的想法。我測試了這個方法,並且它工作到目前爲止。我可能會添加更多的功能,但這是一個很好的起點。但是,我想知道如果有數百位訪問者連接,服務器上將承載何種負載? – Crisenusa

+0

@Crisenusa在你最後一個問題,我無法回答,因爲它取決於你的服務器,你的服務器端代碼,你的服務器的帶寬等Javascript是一種客戶端語言,1分鐘計時器不是一個問題,數百要求每一分鐘都可以沉重地處理,但正如我所說,這取決於其他因素。如果您認爲主要答案是正確的,請記住標記:) – Baro

+0

再次感謝@Baro。這段代碼實際上是作爲node.js/express.js應用程序的一部分在服務器上。這就是爲什麼我想知道如果有成百上千的訪問者請求聊天,服務器的負載。對於忘記提及這一點我很抱歉。我想知道是否有模式來解決這個像某種隊列系統。 – Crisenusa