Я знаю, что если я использую Java BufferedReader.readLine (), я могу достичь конца потока, когда readLine () == null, что сделает мой сокет непригодным для дальнейшего чтения, и мне придется создать еще один дляполучить следующий ответ.
Допустим, я отправляю сообщение на сервер каждые 10 секунд.
Сервер закрывает соединение, если в течение последних 60 секунд не было никаких действий.
Почему этот фрагмент кода в Node.js работает непрерывно и никогда не прекращает получать ответы:
var client = new net.Socket();
function sendMsg()
{
client.write(msg);
console.log('Write:\n' + msg);
}
client.connect(PORT, HOST, function() {
console.log('TCP: ' + HOST + ':' + PORT + '\n' + msg + '\n');
setInterval(sendMsg, 10000);
});
client.on('data', function(data) {
console.log('Received:\n' + data);
});
client.on('close', function() {
console.log('Connection closed');
});
Я прочитал в Node.js документация , что сокету необходимо получить пакет FIN для генерации события 'end', которое закрывает поток.
Итак, двумя словами:
- Java закрывает поток, если больше нечего читать.
- Node.js закрывает поток после получения пакета FIN ине волнует, если поток пустой.
Правильно ли я понимаю, что эти два не очень сопоставимы по своему отношению, или есть ли способ реализовать нечто подобное в Java?
В настоящее время я прекращаю читать поток после встречи с определенной фразой и продолжаю, когда я уверен, что есть еще что почитать позже.Пока это работает, но я знаю, что это уродливый хакер и очень подвержен ошибкам.