как закрыть сокет, если соединение с сервером не может быть установлено в node.js и socket.io?

#node.js #socket.io

Вопрос:

в настоящее время я использую следующий код в node.js с розеткой.ввод-вывод для подключения к моему серверу, который работает нормально. Но если мой node.js сервер не работает, клиент пытается подключиться к нему снова и снова через определенные промежутки времени, но я хотел бы остановить его и закрыть сокет на стороне клиента, если сервер недоступен. Я пробовал использовать connect_failed, но, к сожалению, это никогда не вызывается. как это можно сделать?

 function findOpponent(gamemode)
{

    console.log('Registering myself on nodejs Server and waiting for 2nd player'); 


    socket = io.connect("http://gladiator.localhost:3000" , {
        'query': 'amp;uuid=' uuid 'amp;authkey=' auth_key 'amp;gamemode=' gamemode
    });


    socket.on('connect_failed', function() {
        // --> this is never being called
        console.log("Sorry, there seems to be an issue with the connection!");
    });


    socket.on('user join',function(msg){
        alert('USER JOINED'); 
    }); 

    socket.on('user leave',function(msg){
        console.log(msg); 
        alert('USER LEFT'); 
    }); 


    socket.on('message',function(msg){
        alert(msg); 
    }); 


    socket.on('gamestart',function(data){
        console.log('gamestart'); 
        alert(data.msg); 
    }); 


}
 

Ответ №1:

попробуйте autoConnect и reconnection варианты для клиента ввода-вывода сокета

 { autoConnect: false, reconnection: false}
 

Редактировать:

и вы можете прослушивать connect_error событие на предмет обнаружения ошибки подключения

 socket.on("connect_error", callback)
 

Комментарии:

1. спасибо, что это работает, поэтому клиент пытается подключиться к серверу только один раз. Однако я хочу отобразить сообщение об ошибке для клиента, если он не может подключиться. Поэтому мне в основном нужен способ поймать ошибку подключения.

2. @DanielResch попробуй это socket.on("connect_error", callback) и socket.on("disconnect", callback)

3. спасибо, что on(«connect_error») делает именно то, что я искал, вы могли бы включить это в свой ответ. Я просто не понимаю, для чего тогда предназначено событие connect_failed.