#javascript #node.js #sockets #logging #tcp
#javascript #node.js #сокеты #ведение журнала #tcp
Вопрос:
Итак, я работаю над некоторым кодом, который подключается к серверу журналов и отправляет сообщения в определенном формате. Я создаю сокет, передаю номер хоста и порта, а затем мой клиент успешно подключается. Я знаю это, потому что событие connect выполняет свой обратный вызов. Однако, когда я пытаюсь выполнить запись в сокет, соединение разрывается. Есть идеи, что может быть причиной этого?
вот фрагмент того, что я делаю.
function Harvester(options){
const socket = new net.Socket();
socket.connect({port:options.port, host:options.host}, ()=>{
socket.write(` node|${options.node}rn`);
});
socket.on('connect', (socket) => console.log('Connected to Log Harvester!'));
socket.on('data', (data) => console.log('Message from Logio Server: ', data));
socket.on('error', (error) => console.log('Error from Logio Server: ', error.message));
socket.on('close', (error) => {
console.log(!error ? 'Client connection closed' : 'Client connection closed with Error');
});
socket.on('end', () => console.log('Logio Connection Ended'));
return {
/**
* Writes log to tcp socket
* @param node
* @param stream
* @param level
* @param message
*/
log: (level, stream, message, done) => {
socket.write(` log|${stream}|${options.node}|${level}|${JSON.stringify(message)}n`, function(err){
if(err){ throw err }
socket.end();
});
done(null, true);
}
}
}
сервер отклоняет мое соединение? Нужно ли мне каким-то образом поддерживать соединение?
Комментарии:
1. Какую ошибку вы видите в коде при записи в сокет?
2. @Prabhu Ошибок нет. Просто клиентское соединение завершилось нормально. Кроме
socket.on('close')
того, обратный вызов также возвращает свойhas_error
аргумент как falsew, что означает, что он закрывается соответствующим образом. Я видел несколько других примеров в Интернете, и, похоже, мне нужно реализовать какую-то логику повторного подключения для события закрытия, что, должен сказать, кажется очень странным.3. можете ли вы проверить, кто закрывает сокет? Получите tcpdump. Это укажет вам правильное направление
4. Спасибо @Prabhu Нашел проблему. я сам закрывал сокет с помощью socket.end в сокете. напишите обратный вызов, который я не должен делать.