2016-03-26 3 views
0

Возможно ли передавать потоки ответов от нескольких запросов на HTTP-сервер?nodejs-request module-streaming несколько ответов от запроса к http.ServerResponse

в expressjs, что-то как-

router.get('/streamingApi',(req,res)=> { 
request('http://localhost:3000/first').pipe(res); //take 300 ms 
request('http://localhost:3000/second').pipe(res); //take 100 ms 
request('http://localhost:3000/third').pipe(res); // take 200 ms 
} 

Идея заключается в том, чтобы вернуть поток в браузере по мере поступления (когда мы получаем ответ на второй апи, который является самым быстрым, поток его браузера, затем третий api и последний ответ первого api).

Но когда я запускаю вышеуказанный код, только первый ответ получает трубку, а затем соединение закрывается.

это даже возможно с поточным трубопроводом? любые предложения по исправлению этого без использования socket.io?

ответ

0

Невозможно передать их всем сразу, иначе вы могли бы получить ответ со смешанными или повторяющимися данными.

Кроме того, нет возможности заранее знать, какой запрос будет завершен первым, если у вас нет предварительного знания о производительности каждой конечной точки. Я предполагаю, что вы могли бы отпустить запросы ко всем трем конечным точкам и только передать поток, который реагирует самым быстрым (прерывая два других в этой точке), однако это не обязательно является гарантией того, что этот поток завершится до того, как другие будут иметь.

+0

Благодарим за отзыв. Мне нужны все 3 ответа, а не только первый. но не хотите дождаться завершения всех 3 запросов. – msreekm

+0

Я не понимаю, чего вы пытаетесь достичь. Вы хотите буферизовать все 3 ответа и * затем * отправить их обратно клиенту? Если вам нужны все 3 ответа, и вы не хотите ждать их завершения, как вы ожидаете доставить их всем клиенту? – mscdex

+0

mscdex - вот что Ям также задается вопросом, есть ли способ сделать это. , Один из способов, которым я смог добиться, - использовать веб-узлы. но масштабирование приложений для веб-сайтов не так просто. поэтому я пытаюсь понять, можем ли мы сделать это с помощью обычных HTTP-вызовов. спасибо за ответ. – msreekm