簡體   English   中英

測試與socket.io服務器的多個連接

[英]Testing multiple connections to socket.io server

我想為我的socket.io服務器應用程序編寫一個測試。 該測試應創建一定數量的連接(例如10個),然后每個客戶端應每2秒向服務器發送一條消息。 這是我所做的:

var numberOfSockets = 10;
var instruction = "test";

for (var id = 1; id <= numberOfSockets; id++)
{
    var socket = require('socket.io-client')('http://localhost:3000');
    var logPassData = {"login":id, "pass":id, "serverClient":"client"};
    socket.emit('logPass', logPassData);
    newFuncTEST(waitTEST);
}

newFuncTEST(waitTEST);

function waitTEST(){
    setTimeout(function(){
        newFuncTEST(waitTEST);
    }, 2000);
}
function newFuncTEST(callback){
    socket.emit('instruction', instruction);
    callback();
}

日志文件:

23:1:12  9 (Client) logged in.
23:1:12  1 (Client) logged in.
23:1:12  2 (Client) logged in.
23:1:12  9 sent instruction: test.
23:1:12  1 sent instruction: test.
23:1:12  3 (Client) logged in.
23:1:12  2 sent instruction: test.
23:1:12  4 (Client) logged in.
23:1:12  3 sent instruction: test.
23:1:12  5 (Client) logged in.
23:1:12  4 sent instruction: test.
23:1:12  6 (Client) logged in.
23:1:12  5 sent instruction: test.
23:1:12  10 (Client) logged in.
23:1:12  6 sent instruction: test.
23:1:12  7 (Client) logged in.
23:1:12  10 sent instruction: test.
23:1:12  10 sent instruction: test.
23:1:12  8 (Client) logged in.
23:1:12  7 sent instruction: test.
23:1:12  8 sent instruction: test.
23:1:14  10 sent instruction: test.
23:1:14  10 sent instruction: test.
23:1:14  10 sent instruction: test.
23:1:14  10 sent instruction: test.
23:1:14  10 sent instruction: test.
23:1:14  10 sent instruction: test.
23:1:14  10 sent instruction: test.
23:1:14  10 sent instruction: test.
23:1:14  10 sent instruction: test.
23:1:14  10 sent instruction: test.
23:1:14  10 sent instruction: test.

我不知道為什么只有id = 10的客戶端會在一段時間后發送指令。 從第10個插槽開始,每2秒就有11條指令。 為什么以及如何將其更改為:

23:1:14  1 sent instruction: test.
23:1:14  2 sent instruction: test.
23:1:14  3 sent instruction: test.
23:1:14  4 sent instruction: test.
23:1:14  5 sent instruction: test.
23:1:14  6 sent instruction: test.
23:1:14  7 sent instruction: test.
23:1:14  8 sent instruction: test.
23:1:14  9 sent instruction: test.
23:1:14  10 sent instruction: test.

您正面臨javascript的主要范圍界定問題之一:

for(i=0;i<10;i++){
  var a=i;
  setTimeout(()=>{alert(a);},2000);
}

這將輸出:10,10,10 ...因為每次循環運行都會覆蓋a 這就是為什么您應該使用let的原因。 每次循環運行時,它都會創建一個新變量,從而解決了您的問題:

for(i=0;i<10;i++){
  let a=i;
  setTimeout(()=>{alert(a);},2000);
}

在您的代碼中:

let socket=...;

要創建10個不同的套接字而不是每次都重寫一個套接字,請確保您必須保留作用域。 您在調用另一個函數時會丟失它。 我建議您縮短代碼:

for(){
  let socket=...;
  setInterval(()=>{socket.emit()},2000);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM