2013-05-18 2 views
4

У меня есть сервер/клиент сокета, хорошо работающий вместе, однако я хочу начать запись событий, когда сервер отключен при загрузке страницы или во время обычного запуска.socketio client: Как обращаться с сервером socketio вниз

я в том числе код удаленного Socket.io в моем заголовке:

<script src="<?=NODE_HOST?>/socket.io/socket.io.js"></script> 
<script> 
    var nodeHost = '<?=NODE_HOST?>'; 
</script> 

И в мой контроллер клиента у меня есть

 
if(typeof io != 'undefined') 
     this.socket = io.connect(this.settings.server); 
    else 
     this.handleDisconnect(); 

функция Я должен попытаться повторно подключиться через и если: a) разъединение разъема происходит во время нормальной работы или b) сервер не работает на загрузке страницы

 
botController.prototype.handleDisconnect = function() { 

    $.getScript(nodeHost+"/socket.io/socket.io.js").done(function(script, textStatus) { 

     bot.control.socket = io.connect(bot.control.settings.server); 

    }).fail(function(jqxhr, settings, exception) { 
     setTimeout(function() { 
      bot.control.handleDisconnect(); 
     }, 5000); 
    }); 
} 

. Правильно ли я это делаю?

Основной вопрос, я прямо сейчас (что заставило меня создать этот вопрос) мои ошибки кода на странице загрузки, когда сервер выключен, потому что у меня есть такие функции, как:

socket.on(...

Когда сокет еще не установлены существовать. Я могу обернуть их в функцию и вызвать ее, когда обнаруживаю, что глобальный объект сокета существует при успешном повторном подключении? Имеет ли значение, если эта функция, которая содержит socket.on ..., называется многократным (если сервер работает более одного раза во время работы)?

ответ

0

OK Мне удалось найти это решение, которое, похоже, хорошо работает с использованием yepnope, который у меня уже был с использованием Modernizr (он также обрабатывает проблему с перекрестным доменом).

<script src="<?=NODE_HOST?>/socket.io/socket.io.js"></script> 
<script> 
    var nodeHost = '<?=NODE_HOST?>'; 
</script> 
 
// Attempt to connect to nodejs server 
botController.prototype.start = function() {  

    // Is our nodejs server up yet? 
    if(typeof io != 'undefined') { 
     this.socket = io.connect(this.settings.server); 
     this.startSocketEvents(); 
    } else { 
     this.handleDisconnect(); 
    } 
} 

// Our connection to the server has been lost, we need to keep 
// trying to get it back until we have it! 
botController.prototype.handleDisconnect = function(destroySocketObject) { 

    if(destroySocketObject === undefined) 
     destroySocketObject = true; 

    // Destroy any cached io object before requesting the script again 
    if(destroySocketObject) 
     io = undefined; 

    yepnope.injectJs(nodeHost+"/socket.io/socket.io.js", 
     function(result) { 

      // Did it actually download the script OK? 
      if(typeof io != 'undefined') { 
       bot.control.socket = io.connect(bot.control.settings.server); 
       bot.control.startSocketEvents(); 
      } else { 
       setTimeout(function() { 
        bot.control.handleDisconnect(false); 
       }, 5000); 
      } 
     } 
    ); 

Где startSocketEvents функция() содержит все мои socket.on событий

Смежные вопросы