Вы можете архивировать это, используя потоки.
Выбранная вами библиотека line-by-line
поддерживает их, поэтому вам остается только сделать это следующим образом:
Это работает, обратите внимание, что вам нужно требовать http
или https
на основе вашего URL, мой пример - https
const http = require('https');
const LineByLineReader = require('line-by-line')
const options = {
host: 'stackoverflow.com',
path: '/questions/54251676/how-to-read-file-by-url-in-node-js',
method: 'GET',
};
const req = http.request(options, (res) => {
res.setEncoding('utf8');
lr = new LineByLineReader(res);
lr.on('error', function (err) {
console.log('err', err);
});
lr.on('line', function (line) {
console.log('line', line);
});
lr.on('end', function () {
console.log('end');
});
});
req.on('error', (e) => {
console.log('problem with request', e);
req.abort();
});
req.end();
выбор изменяет свои аргументы. Действительно необходимо повторно инициализировать его каждый раз.
Если Вы обеспокоены издержками, стоимость обработки полного FD_SET в ядре является несколько более значительной, чем стоимость FD_ZERO. Вы хотели бы только передать в своем максимуме fd, не FD_SETSZIZE, минимизировать обработку ядра. В Вашем примере:
switch (select((sd + 1),&set,NULL,NULL,&timeout))
Для более сложного случая с несколькими fds Вы обычно заканчиваете тем, что поддержали макс. переменную:
FD_SET(sd,&set);
if (sd > max) max = sd;
... repeat many times...
switch (select((max + 1),&set,NULL,NULL,&timeout))
Если Вы будете иметь большое количество дескрипторов файлов и обеспокоены издержками schlepping их о, необходимо посмотреть на некоторые альтернативы выбору (). Вы не упоминаете ОС, которую Вы используете, но для подобных Unix Ose существуют некоторые:
API отличаются, но они - все по существу интерфейс ядра с сохранением информации для поддержания ряда активных описаний файлов. После того как fd добавляется к набору, Вы будете уведомлены относительно событий на этом fd, не имея необходимость постоянно передавать его в снова.
Прочитайте избранную страницу справочника. Возвращенный набор является только дескрипторами файлов, которые готовы использоваться. Вы, как предполагается, используете FD_ISSET для проверки каждого, если он установлен или нет.
Всегда инициализируйте fd_set право перед использованием его.
Это - способ, которым работает выбор. Это работает лучше всего и имеет больше смысла, если у Вас есть больше чем один сокет. Это - вид точки: Вы выбираете через многие сокеты. Если Вы хотите читать из одного сокета, просто чтение или recv это.