2013-08-15 4 views
8

Как определить, находится ли сервер в автономном режиме или по какой-либо другой причине невозможно подключиться. Мой код выглядит примерно так.Socket.io connect with server offline

this.socket = io.connect(connectionInfo, { 
    reconnect:false 
}); 

Это не вызывает никаких ошибок, поэтому предложение try/catch не работает.

ответ

12

Использование

  • this.socket.on("connect") поймать события подключения
  • this.socket.on("disconnect") поймать разъединения события
  • this.socket.on("connect_failed") поймать не удалось соединение попытки

Использование this.socket.io.on ("connect_error ", callback), чтобы поймать, если сервер отключен.

Вы можете найти все события, в https://github.com/LearnBoost/socket.io/wiki/Exposed-events

+0

В случае, если это поможет другим людям найти this-- «connect_failed» и «reconnect_failed» события не были правильно запущены в версиях версии 0.9.x Socket.io (включая 0.9.16). Подробнее здесь: https://github.com/LearnBoost/socket.io/issues/652 и обходной путь здесь: https://groups.google.com/forum/#!topic/socket_io/7BynuejEmts – mikermcneil

2

Если ваш сервер в автономном режиме и клиент пытается подключиться использование:

socket.on('error', function (err) { 
    console.log(err); 
}); 

Так Клиент знает, что он не может получить доступ к серверу.

+1

После некоторого тестирования, он не работает таким образом в последнем стабильном клиенте Socket.io (v0.9.16) – mikermcneil

4

Поскольку обновление 1.0, события соединения различны. читать эту страницу для получения дополнительной информации: http://socket.io/docs/migrating-from-0-9/

В моем случае, я мог бы обнаружить ошибку соединения следующим образом:

var manager = io.Manager('http://'+window.location.hostname+':3000', { /* options */ }); 
manager.socket('/namespace'); 
manager.on('connect_error', function() { 
    console.log("Connection error!"); 
}); 

this.socket = io.connect('http://'+window.location.hostname+':3000');