#javascript #node.js #sockets #client
#javascript #node.js #сокеты #клиент
Вопрос:
var socket = new net.Socket();
socket.connect(PORT, HOST, function() {
console.log("SOCKET CONNECTED TO: " HOST ":" PORT);
socket.write("Hello World!");
});
socket.on("error", function() {}); // need this line so it wont throw exception
// Add a "close" event handler for the client socket
socket.on("close", function() {
console.log("Connection lost. How do I reconnect? setTimeout?");
});
Как мне переподключиться после сбоя? Теперь, если соединение не выполнено успешно, все останавливается..
Я пытался использовать setTimeout в событии закрытия, но затем, когда сокет подключается, событие «connect» запускается несколько раз..
Комментарии:
1. Предположительно, вы создаете новый объект сокета точно так же, как и первый. Вы не можете переподключить существующий — это просто не имеет смысла концептуально.
2. Но затем я теряю все события, связанные с этим объектом сокета .. т.е. socket.on (‘data’), я должен заново связать все это, я надеялся, что есть лучший способ..
Ответ №1:
Вы могли бы добиться повторного подключения следующим образом, сохраняя привязку события:
function connect() {
var socket = new net.Socket();
socket.connect(PORT, HOST, function() {
console.log('SCOEKT CONNECTED TO: ' HOST ':' PORT);
socket.write('Hello World!');
});
socket.on('error', function() {}); // need this line so it wont throw exception
// Add a 'close' event handler for the client socket
socket.on('close', function() {
connect();
});
}
connect();
Комментарии:
1. Таким образом, мне придется поместить весь мой код, связанный с сокетом, например .on (‘data’), внутри функции connect?
2. Вы могли бы написать вызываемую, например, функцию
handleData
, которая находится за пределамиconnect
функции и вставленаsocket.on('data', handleData);
connect
, это не проблема.3. Хорошо, этого достаточно, я надеялся, что есть что-то вроде сокета. переподключение, но я справлюсь с этим