2013-01-13 19 views
5

socket.io'nun yeniden bağlantı kurma ve her şey için yerleşik bir özelliği olduğunu biliyorum, ancak bunun çalıştığını düşünmüyorum - başkalarından da gördüğüm gibi, onlar için de çalışmıyor.node.js + soket.IO - soket tekrar takılmıyor mu?

Bir kullanıcı bilgisayarını uyku moduna geçirirse, bağlantıyı keser ve açtıklarında tekrar bağlanmadıkları için, sayfanın yenilenmesine kadar herhangi bir bildirim veya hiçbir şey yapmazlar. Belki de doğru şekilde yapmadığım bir şey var mı?

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")

kullanıcı bağlandığı zaman çağrılması gerekir, ya da en azından bu olay meydana olaylar çağrılması gerekir.

Ayrıca socket.socket.connect(); çalışmıyor, bir hatayla geri dönüyor ve soket sunucusunu "bağlantı yok" hatasıyla kapatıyor.

cevap

4

Sorun io.connect params ile ilgilidir.

bu müşteri koduna bak (o girişimleri arasındaki maksimum gecikme ile sonsuza yeniden dener 3sec):

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

Orada iki önemli parametre, orada vardır senin sorunla ilgili:

  • yeniden bağlantı limiti - yeniden bağlanma ile ilgiler arasındaki gecikme süresinin üst sınırını sınırlar. Normalde, sunucu kesintisi sırasında daha büyük ve büyük hale geliyor.
  • maksimum yeniden bağlama denemeleri - kaç kez denemek istiyorsunuz. Varsayılan 10'dur. Çoğu durumda bu, istemcinin denemeyi bıraktığı problemdir.
İlgili konular