2012-11-26 33 views
0

我對Socket.IO有一個很奇怪的問題。出於某種原因,看來所述發送「緩衝器」被重複一遍又一遍,因爲每個連接導致n + 1個答覆:Socket.IO的奇怪問題

COM.ping(); 
undefined 
0 "CONNECTION STATUS: OK - 0" app.js:9 
COM.ping(); 
undefined 
1 "CONNECTION STATUS: OK - 1" app.js:9 
2 "CONNECTION STATUS: OK - 1" app.js:9 
COM.ping(); 
undefined 
3 "CONNECTION STATUS: OK - 2" app.js:9 
4 "CONNECTION STATUS: OK - 2" app.js:9 
5 "CONNECTION STATUS: OK - 2" app.js:9 
COM.ping(); 
undefined 
6 "CONNECTION STATUS: OK - 3" app.js:9 
7 "CONNECTION STATUS: OK - 3" app.js:9 
8 "CONNECTION STATUS: OK - 3" app.js:9 
9 "CONNECTION STATUS: OK - 3" app.js:9 
COM.ping(); 
undefined 
10 "CONNECTION STATUS: OK - 4" app.js:9 
11 "CONNECTION STATUS: OK - 4" app.js:9 
12 "CONNECTION STATUS: OK - 4" app.js:9 
13 "CONNECTION STATUS: OK - 4" app.js:9 
14 "CONNECTION STATUS: OK - 4" app.js:9 

的代碼本是相當簡單。在客戶端:

this.ping = function(){ 
     socket.on('PING__',function (data){ 
      console.log(count++,"CONNECTION STATUS: "+$(data)[0].status); 
      data = ''; 
     }); 
     socket.emit('__PING'); 
    } 

在服務器上:

var counter = 0; 
    io.sockets.on('connection', function (socket) { 
     socket.on('__PING', function (data) { 
      socket.emit('PING__' , {status:'OK - '+counter++}); 
     }); 
    }); 

所以,出於某種原因,當我嘗試ping,它以某種方式重申。我不知道爲什麼。有任何想法嗎?

回答

1

想通了。真正愚蠢的邏輯錯誤:

this.ping = function(){ 
     socket.on('PING__',function (data){ 
      console.log(count++,"CONNECTION STATUS: "+$(data)[0].status); 
      data = ''; 
     }); 
     socket.emit('__PING'); 
    } 

本來應該是:

var events = {}; 
this.ping = function(){ 
    if(typeof events.ping === 'undefined'){ 
     events.ping = socket.on('PING__',function (data){ 
      console.log("CONNECTION STATUS: "+$(data)[0].status); 
      data = ''; 
     }); 
    } 
    socket.emit('__PING'); 
} 

它搞亂了,因爲我一遍又一遍的結合事件處理程序笑。