2015-08-28 4 views
10

मुझे एक बहुत ही बुनियादी उदाहरण मिला है। इस सवाल को पहले कई बार स्टैक ओवरफ़्लो में पूछा गया था लेकिन मुझे सही जवाब नहीं मिला, इसलिए मैं इस मूल उदाहरण के साथ जा रहा हूं।socket.io कई बार उत्सर्जित करता है

सर्वर:

var app = require('express')(); 
var server = require('http').Server(app); 
var io  = require('socket.io')(server); 

server.listen(3000); 

app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 

io.on('connection', function (socket) { 
    socket.on('chat', function (data) { 
    var op = false; 
    if(data.id == '1234'){ 
     op = 'yes'; 
    }else{ 
     op = 'no'; 
    } 
    socket.emit('result', { hello: op }); 
    }); 
}); 

ग्राहक:

<html> 
    <body> 
     <button onclick="check()">Test Me :-)</button> 
     <script src="/socket.io/socket.io.js"></script> 
     <script> 
      var socket = io.connect('http://localhost:3000'); 

      var check = function(){ 

      var data = { id : '234'}; 
      socket.emit('chat', data); 

      socket.on('result', function(data){ 
       console.log('The data is '+data) 
      }) 
      } 
     </script> 
    </body> 
</html> 

जब मैं परीक्षण मुझे बटन पहली बार के लिए socket.emit ('परिणाम', {: 'दुनिया' हैलो}) पर क्लिक करें ; यह एक बार उत्सर्जित होता है। और कंसोल में मैं इस मुद्रित हो रही है:

console.log('The data is '+data) 

लेकिन जब मैं एक बार फिर से क्लिक कर मैं इस तीन बार मुद्रित हो:

console.log('The data is '+data) 
console.log('The data is '+data) 
console.log('The data is '+data) 

मैं तीसरी बार छह बार मुद्रित करने के लिए क्लिक करें:

console.log('The data is '+data) 
console.log('The data is '+data) 
console.log('The data is '+data) 
console.log('The data is '+data) 
console.log('The data is '+data) 
console.log('The data is '+data) 

इस तरह यह गुणा और चल रहा है।

क्या कोई मुझे इस समस्या को हल करने के बारे में अंतर्दृष्टि दे सकता है। आपकी मदद की बहुत सराहना की जाती है। धन्यवाद!

उत्तर

8

मुझे लगता है कि आप प्रत्येक कॉल को 'परिणाम' के लिए अधिक से अधिक श्रोताओं को जोड़ रहे हैं।

पहली बार क्लिक -> कॉल 1 श्रोता से 1 console.log फोन

दूसरी बार क्लिक -> कॉल 1 श्रोता से 1 console.log फोन + कॉल 1 श्रोता से 2 console.log फोन + 2 कंसोल फोन कॉल 2 श्रोता 0 से लॉग इन करें

तीसरा समय -> पिछले लॉग + कॉल 3 कलेक्शन.लॉग कॉल 1 श्रोता से कॉल करें + कॉल 2 कलेक्शन.लॉग कॉल 2 श्रोता से कॉल करें और कॉल 3 श्रोता से 3 console.log पर कॉल करें।

समारोह से बाहर 'परिणाम' के लिए श्रोता डाल प्रयास करें:

<html> 
<body> 
    <button onclick="check()">Test Me :-)</button> 
    <script src="/socket.io/socket.io.js"></script> 
    <script> 
     var socket = io.connect('http://localhost:3000'); 

     socket.on('result', function(data){ 
      console.log('The data is '+data) 
     }) 
     var check = function(){ 

     var data = { id : '234'}; 
     socket.emit('chat', data); 
     } 
    </script> 
</body> 
</html> 
+1

धन्यवाद बहुत बहुत dude.It करता चाल :-) – sdg

संबंधित मुद्दे