Я знакомясь с потоками в nodejs и у меня есть вопрос:Простейшее nodejs эхо сервер
У меня есть то, что я думаю, что это наиболее простое nodejs «эхо-сервер», то есть сервер, на котором простые трубы обратно в поток ответа независимо от того, что он получает через поток запроса. Работает, но с предостережением. Клиент получает данные только после закрытия потока отправки. Вот код сервера:
var http = require('http')
var server = http.createServer(function (req, res) {
req.pipe(res);
});
server.listen(8000);
А вот как я проверить:
Выполнение следующих работ просто отлично
term1> node server.js&
term2> echo 'hello world!'|curl --no-buffer --data-binary @- 'http://localhost:8000'
hello world!
Однако, это работает только потому, что эхо закрывает свой выходной файл дескриптор после выполнения, т. е. сервер ничего не будет писать до тех пор, пока его клиент не будет отправлен материал:
term2>
term2> yes|curl --no-buffer --data-binary @- 'http://localhost:8000'
(здесь эта линия застревает навсегда)
Я бы ожидать, что yes
заполнит поток буферов довольно быстро, так что я бы начать видеть у возвращается довольно быстро. К сожалению, они никогда этого не делают.
Ожидается ли это? Как использовать потоки/трубы, чтобы они имели желаемый эффект? Кстати, меня не волнует, вернется ли выход в куски ... Я понимаю, что это будут результаты потоков (или базового файла i/o), выполняющие магию буферизации.
Спасибо за вашу помощь
Что делает труба точно? Вы всегда вызываете его по запросу и передаете ему ответ функции http.createServer? – Jwan622