2013-01-13 28 views
5

मुझे पता है कि सॉकेट.ओओ में रीकनेक्टिंग और सब कुछ के लिए एक सुविधा है, हालांकि मुझे नहीं लगता कि यह काम कर रहा है - जैसा कि मैंने दूसरों से देखा है, यह भी उनके लिए काम नहीं कर रहा है।node.js + socket.IO - सॉकेट रीकनेक्ट नहीं कर रहा है?

यदि कोई उपयोगकर्ता अपने कंप्यूटर को सोने के लिए रखता है, तो यह उन्हें डिस्कनेक्ट करता है, और फिर जब वे इसे वापस खोलते हैं तो वे अब जुड़े नहीं होते हैं, इसलिए जब तक वे पृष्ठ को रीफ्रेश नहीं करते हैं, तब तक वे किसी भी अधिसूचना या कुछ भी नहीं करते हैं। शायद यह सिर्फ कुछ है जो मैं सही ढंग से नहीं कर रहा हूं?

var io = require('socket.io').listen(8080); 
var users = {}; 

////////////////USER CONNECTED///// 

console.log("Sever is now running"); 

io.sockets.on('connection', function (socket) { 

    //Tell the client that they are connected 
    socket.emit('connected'); 

    //Once the users session is recieved 
    socket.on('session', function (session) { 

     //Add users to users variable 
     users[socket.id] = {userID:session, socketID:socket}; 

     //When user disconnects 
     socket.on('disconnect', function() { 

     //socket.socket.connect(); 

      var count= 0; 
      for(var key in users){ 
       if(users[key].userID==session)++count; 
       if(count== 2) break; 
      } 
      if(count== 1){ 
       socket.broadcast.emit('disconnect', { data : session}); 
      } 

      //Remove users session id from users variable 
      delete users[socket.id]; 
     }); 


     socket.on('error', function (err) { 
      //socket.socket.connect(); 
     }); 

socket.emit("connection") जब उपयोगकर्ता पुन: कनेक्ट हो कॉल किया जाना चाहिए, या कम से कम कि घटनाओं है कि घटना में होने के लिए कहा जा करने की जरूरत है।

भी socket.socket.connect(); काम नहीं करता है, यह एक त्रुटि के साथ आता है और यह सॉकेट सर्वर को "कनेक्ट मौजूद नहीं है" की त्रुटि के साथ बंद कर देता है।

उत्तर

4

समस्या आईओ.कनेक्ट पैराम्स से संबंधित है।

इस ग्राहक कोड में देखो (यह प्रयास के बीच अधिकतम देरी से हमेशा के लिए फिर से कनेक्ट करने, कोशिश करेंगे 3sec):

ioParams = {'reconnection limit': 3000, 'max reconnection attempts': Number.MAX_VALUE, 'connect timeout':7000} 
socketAddress = null 
socket = io.connect(socketAddress, ioParams) 

दो महत्वपूर्ण पैरामीटर सारे हैं, आपकी समस्या से संबंधित:

  • पुन: कनेक्शन सीमा - पुनः कनेक्ट प्रयासों के बीच देरी के ऊपरी समय को सीमित करें। आम तौर पर यह सर्वर आउटेज
  • अधिकतम पुन: प्रयास प्रयासों के समय में बड़ा और बड़ा हो रहा है - आप कितनी बार कोशिश करना चाहते हैं। डिफ़ॉल्ट 10 है। ज्यादातर मामलों में यह समस्या है कि ग्राहक कोशिश करना बंद कर देता है।