2016-05-09 2 views
0

Я хочу знать, как создать автономное приложение Node, если удаленный сервер (работает с Socket.io) подключен и прослушивает входящие соединения.Проверьте, открыт ли сокет и его прослушивание, node, socket.io

Если сервер подключен и прослушивается, подключитесь к socket-io.client, а если нет, запишите что-нибудь в БД.

Я не знаю, как это сделать с помощью socket-io.client. Адрес имеет IP и порт, поэтому я просто не могу выполнить ping на IP без порта.

Любые идеи? Благодаря!

+0

Вы говорите, что не знаете номер порта, который хотите увидеть, если он прослушивает? – jfriend00

+0

@ jfriend00 Я знаю порт и IP, но вы не можете пинговать порт (или нет, что я знаю), просто IP. – Laerion

ответ

1

Вы можете просто попытаться сделать подключение socket.io к серверу. Если он преуспеет, то он слушает. Если он терпит неудачу, то, по-видимому, он не слушает. Вот как это сделать:

// check a socket.io connection on another server from a node.js server 
// can also by used from browser client by removing the require() 
// pass hostname and port in URL form 
// if no port, then default is 80 for http and 447 for https 
// 2nd argument timeout is optional, defaults to 5 seconds 
var io = require('socket.io-client'); 

function checkSocketIoConnect(url, timeout) { 
    return new Promise(function(resolve, reject) { 
     var errAlready = false; 
     timeout = timeout || 5000; 
     var socket = io(url, {reconnection: false, timeout: timeout}); 

     // success 
     socket.on("connect", function() { 
      clearTimeout(timer); 
      resolve(); 
      socket.close(); 
     }); 

     // set our own timeout in case the socket ends some other way than what we are listening for 
     var timer = setTimeout(function() { 
      timer = null; 
      error("local timeout"); 
     }, timeout); 

     // common error handler 
     function error(data) { 
      if (timer) { 
       clearTimeout(timer); 
       timer = null; 
      } 
      if (!errAlready) { 
       errAlready = true; 
       reject(data); 
       socket.disconnect(); 
      } 
     } 

     // errors 
     socket.on("connect_error", error); 
     socket.on("connect_timeout", error); 
     socket.on("error", error); 
     socket.on("disconnect", error); 

    }); 
} 

checkSocketIoConnect("http://192.168.1.10:8080").then(function() { 
    // succeeded here 
}, function(reason) { 
    // failed here 
}); 
+0

@Laerion - Это ответ на ваш вопрос? – jfriend00

+0

Идея работала, я немного изменил ее в соответствии с моим кодом, но я получаю '{ " type ":" TransportError ", " description ": 503 }' у вас есть идеи? – Laerion

+0

@Laerion - Дикая догадка. [Этот отчет] (https://github.com/socketio/socket.io/issues/1995) звучит, как будто это может быть несоответствие в версии socket.io между клиентом и сервером. – jfriend00

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